本文講述了Linux下Ramdisk根文件系統(tǒng)制作過(guò)程。
一、在一個(gè)已建好的文件系統(tǒng)上進(jìn)行修改 設(shè)已建立好的文件系統(tǒng)壓縮文件為ramdisk.gz 1、解壓 #cd ramdisk.gz所在目錄 #gunzip ramdisk.gz 在解壓后,得到文件系統(tǒng)鏡象文件ramdisk, 覆蓋了原來(lái)的壓縮文件 2、鏡象文件掛載 鏡象文件必須經(jīng)過(guò)掛載后才能看到文件系統(tǒng)中的各個(gè)目錄和詳細(xì)內(nèi)容 #mkdir /mnt/loop /* /mnt/loop 是文件系統(tǒng)要掛載到的目錄 #mount –o loop ramdisk /mnt/loop 在掛載目錄/mnt/loop下對(duì)文件系統(tǒng)進(jìn)行操作 #cd /mnt/loop #do_whatever_you_want_to_do /*根據(jù)需要增加、刪減或是修改文件系統(tǒng)的內(nèi)容 4、卸裝文件系統(tǒng) 跳到/mnt/loop目錄外,否則無(wú)法卸裝,提示busy #cd ramdisk所在目錄 #umount /mnt/loop 5、壓縮文件系統(tǒng) #gzip –v9 ramdisk /*生成ramdisk.gz壓縮文件 二、自己建立根文件系統(tǒng) 1、建立loop設(shè)備的臨時(shí)掛載點(diǎn) #mkdir /mnt/loop 2、建立一個(gè)大小為15M的臨時(shí)文件 #dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=15360 注意可根據(jù)自己的需要建立大小合適的文件系統(tǒng),更改count大小即可。 此處以dd命令建立一個(gè)了一個(gè)15360KB文件系統(tǒng)映象,存于/tmp/loop/tmp,并以.dev/zero對(duì)它進(jìn)行初始化。用這種方式對(duì)文件系統(tǒng)進(jìn)行初始化,稍后當(dāng)我們使用gzip命令壓縮整個(gè)映象時(shí),將讓文件系統(tǒng)中未使用的部分獲得最大壓縮比。 3、將設(shè)備文件與臨時(shí)文件聯(lián)系起來(lái) #losetup /dev/loop0 /tmp/loop_tmp 把設(shè)備文件/dev/loop0與臨時(shí)鏡象文件/tmp/loop_tmp聯(lián)系起來(lái),/dev/loop0是個(gè)塊設(shè)備 如果出現(xiàn)“ioctl:LOOP_SET_FD:設(shè)備或資源忙”,說(shuō)明/dev/loop0設(shè)備還和一文件聯(lián)系,可用losetup /dev/loop0查看地,并可用-d 刪除。 如:losetup -d /dev/loop0 即可刪除。 4、將/dev/loop0格式化為ext2文件系統(tǒng) #mke2fs –m 0 /dev/loop0 -m 0指出不必在文件系統(tǒng)上為“超級(jí)用戶”保留任何區(qū)塊。 Linux內(nèi)核識(shí)別兩種可以直接考貝的到ramdisk的文件系統(tǒng),它們是minix和ext2,minix是linux早期版本所用的文件系統(tǒng),從minix操作系統(tǒng)而來(lái),ext2性能更好。 5、把虛擬盤(pán)掛在節(jié)點(diǎn)/mnt/loop上 #mount –t ext2 /dev/loop0 /mnt/loop 6、用cp –af命令將所需要文件拷貝到虛擬盤(pán)上 cp –help查看cp 用法。cp –arf … -r表示拷貝目錄 /bin, /dev, /etc, /lib, proc, /sbin, /usr都是不可或缺的目錄,建議保留/tmp,/var,不過(guò)可以為空。而為多用戶提供可擴(kuò)展環(huán)境的所有目錄(例如/home、/mnt、/opt、/root)都應(yīng)該省略。 用cp復(fù)制文件時(shí),建議把已建立好的文件系統(tǒng)中的內(nèi)容全部拷貝過(guò)來(lái),這樣比較簡(jiǎn)單,不需要再去編譯安裝busybox等。當(dāng)然自己也可以那樣去做。 7、卸載文件系統(tǒng),得到的/tmp/loop_tmp就是文件系統(tǒng)映象。 #cd /mnt/loop以外的目錄 (否則會(huì)提示無(wú)法卸載,設(shè)備busy) #umount /mnt/loop 8、壓縮文件系統(tǒng)映象 #gzip –v9 /tmp/loop_tmp >/tftpboot/ramdisk.gz 在/tftpboot下生成了ramdisk.gz,這樣一個(gè)內(nèi)存文件鏡象生成了。 或只是#gzip –v9 /tmp/loop_tmp,則就是在/tmp下生成loop_tmp.gz文件,一樣的。 出現(xiàn)的錯(cuò)誤: 1、 ## Booting kernel from Legacy Image at 01000000 ... Wrong Ramdisk Image Format Ramdisk image is corrupt or invalid 解決方式 mkimage -n 'uboot ext2 ramdisk rootfs' -A ppc -O linux -T ramdisk -C gzip -d rootfs.ext2.gz rootfs.ext2.gz.uboot 具體參看mkimage 的用法 及原因 2、系統(tǒng)啟動(dòng)后登錄用戶不正確 刪除etc/securetty 文件即可 三、自己建立根文件系統(tǒng)(與二中不同) 1、建立loop設(shè)備的臨時(shí)掛載點(diǎn) #mkdir /mnt/loop 2、建立文件系統(tǒng)映象 #dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=15360 以上2條同二中是一樣 3、mke2fs –F –v –m 0 /tmp/loop_tmp 此處-F選項(xiàng)將可迫使mkefs2在文件上運(yùn)行。否則mke2fs會(huì)抱怨/tmp/loop_tmp不是個(gè)塊設(shè)備(在上面說(shuō)了,我的理解是/tmp/loop_tmp文件映象必須是塊設(shè)備文件,前面的做法是用塊設(shè)備文件/dev/loop0與之相關(guān)聯(lián))。-v 選項(xiàng)指出mke2fs應(yīng)該以verbose模式執(zhí)行,-m0指出不必在文件系統(tǒng)上為“超級(jí)用戶”保留任何區(qū)塊,因?yàn)樵谇度胧较到y(tǒng)中通常是單用戶系統(tǒng),為“超級(jí)用戶”保留區(qū)塊沒(méi)有意義。 4、掛載映象文件 #munt –o loop /tmp/loop_tmp /mnt/loop 掛載后,在/mnt/loop下就可以對(duì)文件系統(tǒng)的內(nèi)容進(jìn)行操作。 5、cp操作,同二中的第6條 6、卸載映象文件 #umount /mnt/loop 7、壓縮映象文件 #gzip –v9 /tmp/loop_tmp 第三中的做法與第二中的做法不同,在第二中,把塊設(shè)備文件/dev/loop0與映象文件/tmp/loop_tmp相關(guān)聯(lián),然后對(duì)/dev/loop0及虛擬盤(pán)進(jìn)行操作,就作用在/ltmp/loop_tmp上。 而第三中,是直接對(duì)映象文件/tmp/loop_tmp進(jìn)行操作,用mke2fs –F …將其當(dāng)作塊設(shè)備文件進(jìn)行操作。
Image Name: Linux-2.6.35+
Created: 2011-02-18 7:31:27 UTC
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 3384101 Bytes = 3.2 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
聯(lián)系客服