Linux文件系統的安裝和卸載
編者按:本文介紹Linux文件系統的安裝和卸載如何控制,以及當中需要了解的原理和注意事項。
為了最有效地利用本系列中的文章,您應該具有基本的 Linux 知識,并需要準備一個 Linux 系統,用于練習本文介紹的命令。除非特殊說明,本文中的示例(大部分)使用帶有 2.6.32 內核的 Fedora 13。有時候不同版本的程序輸出格式不同,因此您所得到的結果未必總是與這里所示的清單和圖相同。
您還應該熟悉我們的文章 “學習 Linux,101:創建分區和文件系統” 中的內容。
Linux 文件系統是一個用 / 劃分根目錄的大的目錄樹,但是我們在不同的設備和分區上也有文件系統。怎樣解決這一明顯的不一致呢?根(/)文件系統是作為安裝過程的一部分安裝的。您所創建的其他每個文件系統不能用于您的 Linux 系統,直至它被安裝在一個掛載點。
在當前安裝的文件系統集中,掛載點只是一個路徑,其中設備上的文件系統被移植到樹中。安裝是使設備上的文件系統可訪問的一個過程。例如,您可以將文件系統作為 /boot、/tmp 或 /home 安裝到硬盤驅動上,您也可以將文件系統作為 /mnt/floppy 安裝到軟盤驅動上,也可以作為 /media/cdrom1 安裝到 CD-ROM 上,正如您所看到的,掛載點可能是在根目錄,或者是更遠的子目錄。
除了分區、軟盤和 CD 上的文件系統外,還有其他類型的文件系統。tmpfs 文件系統是一個虛擬內存文件系統。您也可以使用一個網絡文件系統(比如,NFS 或 AFS)將文件系統從一個系統安裝到另一個系統。您甚至可以在已有的文件系統上創建一個文件,并格式化為一個文件系統(可能不同),然后安裝。這通常使用光學媒介映像完成,在這您似乎需要下載一個 ISO CD 或 DVD 鏡像,然后安裝文件,而不是將其刻錄成一個真正的媒體。文件中的交換空間(不是專用交換空間)是另一個示例。
安裝過程實際上是指在某個設備(或其他資源)上安裝文件系統,通常簡稱為 “安裝設備”,可以理解為 “在設備上安裝文件系統”。
安裝和卸載文件系統通常需要 root 權限。如果您作為一個普通用戶登錄,您可以使用 su -
切換到根目錄或者 sudo
。在我們的示例中,當命令提示以 # 結束時,如以下清單 1 所示,您將需要 root 權限。
mount
命令的基本格式有兩個參數:含有將要安裝的文件系統的設備(或其他資源)和掛載點。例如,我們在掛載點 /dos 安裝我們的 FAT32 分區 /dev/sda9,如清單 1 所示。
清單 1. 掛載 /dos
[root@echidna ~]# mount /dev/sda9 /dos |
在掛載點上進行安裝之前,必須先要有掛載點存在。如果沒有,您會收到一個錯誤消息,需要創建掛載點或使用另一個掛載點,如清單 2 所示。
清單 2. 安裝錯誤
[root@echidna ~]# mount /dev/sda9 /dos mount: mount point /dos does not exist [root@echidna ~]# mkdir /dos [root@echidna ~]# mount /dev/sda9 /dos |
當您在一個已有目錄上安裝一個文件系統時,您將要安裝的文件系統上的文件就變成了掛載點的子目錄和文件。如果掛載點目錄已經包含文件或子目錄,它們不會丟失,但是不再可用,直至安裝的文件系統被卸載,方可再次使用。要避免這類問題,一個較好的辦法就是只使用空目錄作為掛載點。
安裝了一個文件系統之后,任何創建或復制到掛載點或其下的任何目錄的文件或目錄將在安裝的文件系統上被創建。在我們的示例中,文件 /dos/sampdir/file.txt 將被在我們在 /dos 下安裝的 FAT32 文件系統上創建。
通常,mount
命令自動檢測安裝的文件系統的類型。偶爾,您可能需要使用 -t
選項明確指定文件系統類型,如清單 3 所示。
清單 3. 以顯式文件系統類型安裝
[root@echidna ~]# mount -t vfat /dev/sda9 /dos |
想要查看安裝了什么文件系統,使用不帶參數的 mount
命令。清單 4 展示了我們的示例系統。注意,只是簡單的列出安裝的文件系統,不需要 root 權限。
清單 4. 顯示安裝的文件系統
[ian@echidna ~]$ mount /dev/sda6 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda2 on /grubfile type ext3 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) gvfs-fuse-daemon on /home/ian/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=ian) dw.raleigh.ibm.com:/vol/vol1/dwcontent on /mnt/dwcontent type nfs (rw,addr=9.42.155.6) /dev/sdb9 on /mnt/sdb9 type ext3 (rw) /dev/sda9 on /dos type vfat (rw) /dev/sr0 on /media/KNOPPIX type iso9660 (ro,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000 ,iocharset=utf8,mode=0400,dmode=0500) |
您也可以通過顯示 /proc/mounts 或 /etc/mtab 來查看類似信息,這兩個都含有關于安裝的文件系統的信息。
#p#
安裝選項
mount
命令有幾個覆蓋默認行為的選項。例如,您可以通過指定 -o ro
來安裝一個只讀文件系統。如果文件系統已經安裝,添加 remount
,如清單 5 所示。
清單 5. 卸載只讀文件系統
[root@echidna ~]# mount -o remount,ro /dos |
注意:
- 用逗號分隔多個選項,比如
remount
和ro
。 - 卸載一個已有文件系統時,指出掛載點或者設備名其中一個就足夠了,沒有必要都指出。
- 您不能以讀寫方式安裝一個只讀文件系統。那些不能修改的媒介,比如 CD-ROM 光盤將自動以只讀模式安裝。
- 要卸載一個可寫入的讀寫設備,指定
-o remount,rw
。
如果任何進程已經打開卸載文件系統中的文件或目錄,卸載命令就不能完全成功。在下面 卸載文件系統 部分獲取更多信息
#p#
標簽、UUID 和鏈接
在 UNIX 和早期的 Linux 系統中,/dev 目錄通常包含曾經附加到系統的所有設備。曾經使用過的設備都位于 /dev 樹的同一位置,因此使用名稱 /dev/sda6 是自然而然的。隨著熱插拔設備的出現,比如 USB 或 Firewire (IEEE 1394) 附加設備,今天一個給定的設備可能出現在一個 USB 端口,明天同一個設備可能被插到另一個 USB 端口。在這種情況下,無論您將 U 盤插在哪個 USB 端口上,您總是要將它安裝在 /media/myusbstick 上。在主題 102 “學習 Linux,101:引導程序” 一文中,您已經學習了如何使用標簽和 UUID(全局惟一標識符)來識別分區,而不用設備名。如果分區中的文件系統這兩個都支持,您也可以通過 mount
命令使用它們。使用 blkid
命令來尋找設備相關的 UUID 和標簽(如果有)。清單 6 展示了如何使用 blkid
來尋找根分區的標簽和 UUID,如何創建兩個附加掛載點,以及在這兩個附加掛載點上安裝根分區。以下示例做了說明。在生產環境中,您通常不需要這么做。
清單 6. 使用標簽或 UUID 安裝
[root@echidna ~]# blkid /dev/sda6 /dev/sda6: LABEL="Fedora-13-x86_64" UUID="082fb0d5-a5db-41d1-ae04-6e9af3ba15f7" TYPE="ext4" [root@echidna ~]# mkdir /mnt/sda6label [root@echidna ~]# mkdir /mnt/sda6uuid [root@echidna ~]# mount LABEL="Fedora-13-x86_64" /mnt/sda6label [root@echidna ~]# mount UUID="082fb0d5-a5db-41d1-ae04-6e9af3ba15f7" /mnt/sda6uui |
隨著 udev 的出現,您通常在 /dev 目錄下找到設備(比如硬盤驅動器)的附加符號鏈接。清單 7 顯示的是 Fedora 13 系統上的 /dev/sda6 鏈接。
清單 7. 到 /dev/sda6 的符號鏈接
[ian@echidna ~]$ find /dev -lname "*sda6" /dev/disk/by-label/Fedora-13-x86_64 /dev/disk/by-uuid/082fb0d5-a5db-41d1-ae04-6e9af3ba15f7 /dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0-part6 /dev/disk/by-id/wwn-0x50014ee001a8d027-part6 /dev/disk/by-id/scsi-SATA_WDC_WD1001FALS-_WD-WMATV3772868-part6 /dev/disk/by-id/ata-WDC_WD1001FALS-00J7B1_WD-WMATV3772868-part6 /dev/block/8:6 |
安裝一個設備時,您也可以使用一個符號鏈接來作為另外一種指定設備名的方式。
#p#
引導時間和 fstab
在主題 102 “學習 Linux,101:引導程序” 一文中,您已經學習了如何在 GRUB 和 LILO 中使用 root=
參數,來通知引導加載程序應該安裝什么文件系統作為根。一旦此文件系統被安裝,初始化過程運行帶有 -a
選項的 mount
命令來自動安裝一個文件系統集合。該集合是在 /etc/fstab 中指定的。清單 8 顯示了一個樣例 Fedora 13 系統的 /etc/fstab。在該示例中,所有硬盤驅動分區都是用 UUID 標識的。清單 9 顯示了另一個 Ubuntu 9.10 系統示例。
清單 8. 示例 Fedora 13 fstab
# # /etc/fstab # Created by anaconda on Fri May 28 12:37:05 2010 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=082fb0d5-a5db-41d1-ae04-6e9af3ba15f7 / ext4 defaults 1 1 UUID=488edd62-6614-4127-812d-cbf58eca85e9 /grubfile ext3 defaults 1 2 UUID=2d4f10a6-be57-4e1d-92ef-424355bd4b39 swap swap defaults 0 0 UUID=ba38c08d-a9e7-46b2-8890-0acda004c510 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 |
清單 9. 示例 Ubuntu 9.10 fstab
# /etc/fstab: static file system information. # # Use 'blkid -o value -s UUID' to print the universally unique identifier # for a device; this may be used with UUID= as a more robust way to name # devices that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 # / was on /dev/sda7 during installation UUID=8954fa66-e11f-42dc-91f0-b4aa480fa103 / ext3 errors=remount-ro 0 1 # /grubfile was on /dev/sda2 during installation UUID=3a965842-b6dd-4d52-8830-2d0fdb4284a2 /grubfile ext3 defaults 0 2 /dev/sda5 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0 |
以 # 開始的是注釋,記住一行有 6 個字段。因為字段是定位的,必須被指定。
- 文件系統
- 這可能是一個設備名,比如 /dev/sda1 或者一個標簽(LABEL=),或者是 UUID(UUID=)。對于 Fedora 13 示例的根文件系統,它可能是 /dev/sda6、LABEL="Fedora-13-x86_64" 或 UUID="082fb0d5-a5db-41d1-ae04-6e9af3ba15f7"。使用一個標簽或 UUID,當設備被添加或刪除時可以使您的系統更健壯。
- 掛載點
- 這是我們上面 安裝文件系統 小節中介紹過的掛載點,其值應該是 'none' 或 'swap'。在舊的文件系統中您通常會發現其值是 'none' 。
- 類型
- 指定文件系統類型。CD/DVD 驅動器通常只支持 ISO9660 和 UDF 文件系統其中一個,因此您可能要在一個逗號分隔的列表中指定多種可能性,如清單 9 所示。如果您想
mount
自動確定類型,向清單 9 最后一行那樣指定auto
。 - 選項
- 指定安裝選項,如果您想用默認安裝選項,指定
defaults
。您需要了解的選項有:rw
和ro
指定文件系統是以讀寫還是只讀形式安裝。noauto
指定在引導時或者mount -a
出現問題時,該文件系統不能自動安裝。在我們的示例中,這樣做是為了可移動驅動器。user
指定一個非根用戶被允許安裝或卸載文件系統。這對于移動媒介是特別有用的。在舊系統中,該選項是在 /etc/fstab 中指定的,而不是在mount
命令上。對于比較新的系統,可能是在 udev 規則中指定的,該規則位于 /lib/udev/rules.d or /etc/udev/rules.d 內的 rules 文件夾中。在我的 Fedora 13 系統上 DVD 驅動器選項是來自于 udev 規則,這就是為什么在 /etc/fstab 中沒有一項用于光驅。exec
和noexec
指定是否支持來自已安裝文件系統的文件執行。用戶安裝的文件系統默認為noexec
,除非在user
后指定exec
。noatime
將禁止記錄存取時間,不使用訪問時間可以提高性能。
- dump
- 指定
dump
命令是否應考慮 ext2 或 ext3 文件系統作為備份。值為 0 則通知dump
忽略該文件系統。 - pass
- 傳遞非零值來指定引導時檢查文件系統的次序,在 “學習 Linux,101:保持文件系統的完整性” 一文中討論過。
當您安裝一個在 /etc/fstab 中列出的文件系統時,您只需給出設備名或掛載點其中一個,不需要兩個都提供。
在某些系統上,例如 SUSE 11.2,您可能會發現在安裝時生成的 fstab
使用符號鏈接到設備。因此,您可以查看 /dev/disk/by-id/ata-WDC_WD1001FALS-00J7B1_WD-WMATV3772868-part6 獲取文件系統值,不需要查看 /dev/sda6。
查閱手冊頁獲取 fstab
、mount
和 udev
其他資料,包括這里沒有涉及到的選項。
#p#
卸載文件系統
所有安裝的文件系統,通常是在系統重新引導或關閉時自動卸載的。當一個文件系統卸載后,在內存中緩存的所有文件系統數據都被刷新到磁盤中。
您也可以手動卸載文件系統。事實上,當刪除可寫入介質(比如,磁盤、U 盤或存儲鍵)時,您應該這樣做。
使用 umount
命令來卸載文件系統,指定設備名或者掛載點作為參數。清單 10 展示了如何卸載 /dos,然后重新安裝,接著用設備名再次卸載。
清單 10. 卸載文件系統
[root@echidna ~]# umount /dos [root@echidna ~]# mount /dev/sda9 /dos [root@echidna ~]# umount /dev/sda9 |
當一個文件系統被卸載之后,作為掛載點的目錄下的那些文件會再次出現。
如果您想卸載一個文件系統,而此時進程已打開了該文件系統上的文件,將會出現一個錯誤消息。卸載文件系統之前,您應當確認沒有進程正在該文件系統的文件上運行。使用 lsof
或 fuser
命令確定哪個文件是打開的,或哪個進程打開了文件。您可能需要 lsof
上的 -w
選項來避免與 Gnome Virtual File 系統(gvfs)相關的警告消息。查閱手冊頁,學習關于安裝選項和 lsof
的其他信息。如果您檢查整個設備,您可以指定設備名或掛載點。您也可以檢查是否一個獨立的文件正在使用。
為了解釋這些命令,我創建了一個 /etc/fstab on /dos 副本,用一個小的腳本來從 stdin 逐行讀取,然后打印到 stdout,每行之間有 10 秒的停頓。清單 11 顯示了當文件正在使用時 umount
出現的錯誤消息,以及使用 lsof
和 fuser
在 /dos 或基礎設備 /dev/sda9 上檢查打開文件的結果。
清單 11. 檢查打開文件
[root@echidna ~]# umount /dos umount: /dos: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) [root@echidna ~]# lsof -w /dos COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME slowread. 2560 ian 0r REG 8,9 899 123 /dos/fstab sleep 2580 ian 0r REG 8,9 899 123 /dos/fstab [root@echidna ~]# lsof -w /dev/sda9 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME slowread. 2560 ian 0r REG 8,9 899 123 /dos/fstab sleep 2580 ian 0r REG 8,9 899 123 /dos/fstab [root@echidna ~]# fuser -m /dos /dos: 2560 2586 [root@echidna ~]# fuser -m /dev/sda9 /dev/sda9: 2560 2588 |
這時,您可以選擇等待,直至文件系統不再繁忙,或者您也可以通過指定 -l
選項進行一個懶卸載(lazy unmount)。懶卸載直接從文件系統樹分離文件系統,然后,在文件系統空閑時,清理文件系統附加項。
#p#
刪除文件系統
我們談論過刪除移動設備(比如,USB 或 Firewire 附加設備)時遇到的一些問題。每次您需要安裝或卸載這類設備時,切換到 root 權限并不是很方便。CD、DVD 和軟盤驅動器,在其中您需要卸載設備來更換媒介,都是一樣。在上一小節討論 fstab
時,我們就提到過 user
選項,它支持普通用戶安裝或卸載設備。清單 9 顯示了一種為軟盤驅動器或 CD/DVD 驅動器編寫 fstab
的方法。
注意,光驅的文件系統類型被指定為 udf,iso9660
,而軟驅的文件系統類型被指定為 auto
。對于光驅,安裝進程將探測文件系統類型。您可以創建或編輯 /etc/filesystems 來改變系統被探測的次序。
注意:在斷開設備連接或者想要移走媒介之前,您始終應該先卸載可移動驅動。
如果您運行一個圖形化桌面,比如 Nautilus,您通常可以找到支持可移動設備和媒介自動安裝的選項。例如,我想將 Knoppix DVD 插入我系統的 DVD 驅動器,我可以看到如清單 12 所示的一個安裝項。出現了 'uid=1000' 表示 id 為 1000 的用戶可以卸載這個磁盤。id
命令顯示用戶 ian 的 uid 是 1000,因此 ian 可以卸載該磁盤。
清單 12. DVD 的桌面卸載
[ian@echidna ~]$ mount | grep sr0 /dev/sr0 on /media/KNOPPIX type iso9660 (ro,nosuid,nodev,uhelper=udisks, uid=1000,gid=1000,iocharset=utf8,mode=0400,dmode=0500) [ian@echidna ~]$ id ian uid=1000(ian) gid=1000(ian) groups=1000(ian) |
如果驅動器支持這一操作(大多數 CD 和 DVD 驅動支持),您也可以使用 eject
命令彈出可移動介質。如果您不能卸載設備,那么 eject
將可以卸載和彈出磁盤。
#p#
交換空間
在前面討論 fstab
時,您可能已經注意到了交換磁盤沒有一個掛載點,引導進程通常支持在 /etc/fstab 中定義交換空間,除非 noauto
選項被指定。要在一個正在運行的系統上手工控制交換空間 — 比如,添加一個新交換分區 — 使用 swapon
和 swapoff
命令,詳情見手冊頁。
您可以用 cat /proc/swaps
或 swapon -s
查看目前支持的交換設備,如清單 13 所示。
清單 13. 顯示交換空間
[ian@echidna ~]$ swapon -s Filename Type Size Used Priority /dev/sdb1 partition 514044 0 -1 /dev/sdb5 partition 4192928 0 -2 [ian@echidna ~]$ cat /proc/swaps Filename Type Size Used Priority /dev/sdb1 partition 514044 0 -1 /dev/sdb5 partition 4192928 0 -2 |
介紹在 Linux 上安裝設備到此結束。
原文:http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-104-3/index.html?ca=drs-
【編輯推薦】
【責任編輯:楊賽 TEL:(010)68476606】