歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux基礎知識

Linux下Ramdisk根文件系統制作過程解析

一、在一個已建好的文件系統上進行修改

    設已建立好的文件系統壓縮文件為ramdisk.gz

    1、解壓

    #cd ramdisk.gz所在目錄

    #gunzip ramdisk.gz

    在解壓後,得到文件系統鏡象文件ramdisk, 覆蓋了原來的壓縮文件

    2、鏡象文件掛載

    鏡象文件必須經過掛載後才能看到文件系統中的各個目錄和詳細內容

    #mkdir /mnt/loop /* /mnt/loop 是文件系統要掛載到的目錄

    #mount –o loop ramdisk /mnt/loop

    在掛載目錄/mnt/loop下對文件系統進行操作

    #cd /mnt/loop

    #do_whatever_you_want_to_do /*根據需要增加、刪減或是修改文件系統的內容

    4、卸裝文件系統

    跳到/mnt/loop目錄外,否則無法卸裝,提示busy

    #cd ramdisk所在目錄

    #umount /mnt/loop

    5、壓縮文件系統

    #gzip –v9 ramdisk /*生成ramdisk.gz壓縮文件

    二、自己建立根文件系統

    1、建立loop設備的臨時掛載點

    #mkdir /mnt/loop

    2、建立一個大小為15M的臨時文件

    #dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=15360

    注意可根據自己的需要建立大小合適的文件系統,更改count大小即可。

    此處以dd命令建立一個了一個15360KB文件系統映象,存於/tmp/loop/tmp,並以。dev/zero對它進行初始化。用這種方式對文件系統進行初始化,稍後當我們使用gzip命令壓縮整個映象時,將讓文件系統中未使用的部分獲得最大壓縮比。

    3、將設備文件與臨時文件聯系起來

    #losetup /dev/loop0 /tmp/loop_tmp

    把設備文件/dev/loop0與臨時鏡象文件/tmp/loop_tmp聯系起來,/dev/loop0是個塊設備

    如果出現“ioctl:LOOP_SET_FD:設備或資源忙”,說明/dev/loop0設備還和一文件聯系,可用losetup /dev/loop0查看地,並可用-d 刪除。

    4、將/dev/loop0格式化為ext2文件系統

    #mke2fs –m 0 /dev/loop0

    -m 0指出不必在文件系統上為“超級用戶”保留任何區塊。

    Linux內核識別兩種可以直接考貝的到ramdisk的文件系統,它們是minix和ext2,minix是Linux早期版本所用的文件系統,從minix操作系統而來,ext2性能更好。

    5、把虛擬盤掛在節點/mnt/loop上

    #mount –t ext2 /dev/loop0 /mnt/loop

    6、用cp –af命令將所需要文件拷貝到虛擬盤上

    cp –help查看cp 用法。cp –arf … -r表示拷貝目錄

    /bin, /dev, /etc, /lib, proc, /sbin, /usr都是不可或缺的目錄,建議保留/tmp,/var,不過可以為空。而為多用戶提供可擴展環境的所有目錄(例如/home、/mnt、/opt、/root)都應該省略。

    用cp復制文件時,建議把已建立好的文件系統中的內容全部拷貝過來,這樣比較簡單,不需要再去編譯安裝busybox等。當然自己也可以那樣去做。

    7、卸載文件系統,得到的/tmp/loop_tmp就是文件系統映象。

    #cd /mnt/loop以外的目錄 (否則會提示無法卸載,設備busy)

    #umount /mnt/loop

    8、壓縮文件系統映象

    #gzip –v9 /tmp/loop_tmp >/tFTPboot/ramdisk.gz

    在/tFTPboot下生成了ramdisk.gz,這樣一個內存文件鏡象生成了。

    或只是#gzip –v9 /tmp/loop_tmp,則就是在/tmp下生成loop_tmp.gz文件,一樣的。

    在上述自己建立文件系統中,第3條用 losetup命令把塊設備文件/dev/loop0與臨時文件/tmp/loop_tmp聯系起來了,我的理解是/tmp/loop_tmp必須是塊設備文件,所以用/dev/loop0與之相關聯,然後對/dev/loop0的操作和對其虛擬盤的操作,就間接作用在文件系統映象 /tmp/loop_tmp上。

    三、自己建立根文件系統(與二中不同)

    1、建立loop設備的臨時掛載點

    #mkdir /mnt/loop

    2、建立文件系統映象

    #dd if=/dev/zero of=/tmp/loop_tmp bs=1k count=15360

    以上2條同二中是一樣

    3、mke2fs –F –v –m 0 /tmp/loop_tmp

    此處-F選項將可迫使mkefs2在文件上運行。否則mke2fs會抱怨/tmp/loop_tmp不是個塊設備(在上面說了,我的理解是/tmp/loop_tmp文件映象必須是塊設備文件,前面的做法是用塊設備文件/dev/loop0與之相關聯)。-v 選項指出mke2fs應該以verbose模式執行,-m 0指出不必在文件系統上為“超級用戶”保留任何區塊,因為在嵌入式系統中通常是單用戶系統,為“超級用戶”保留區塊沒有意義。

    4、掛載映象文件

    #munt –o loop /tmp/loop_tmp /mnt/loop

    掛載後,在/mnt/loop下就可以對文件系統的內容進行操作。

    5、cp操作,同二中的第6條

    6、卸載映象文件

    #umount /mnt/loop

    7、壓縮映象文件

    #gzip –v9 /tmp/loop_tmp

    第三中的做法與第二中的做法不同,在第二中,把塊設備文件/dev/loop0與映象文件/tmp/loop_tmp相關聯,然後對/dev/loop0及虛擬盤進行操作,就作用在/ltmp/loop_tmp上。

    而第三中,是直接對映象文件/tmp/loop_tmp進行操作,用mke2fs –F …將其當作塊設備文件進行操作。

Copyright © Linux教程網 All Rights Reserved