FlossDoc: 請協力 GPLv3 的中文翻譯工作。
掛載檔案系統
FlossDoc,自由中文開源知識庫
現代 GNU/Linux 的桌面環境如 GNOME 或 KDE 都使用 udev、HAL 和 D-Bus。 當您插入任何標準抽取式儲存裝置 (包括 USB 硬碟、光碟機、快閃記憶卡、儲存器、MP3 播放機和數碼相機等),系統一般會自動識別,掛載和開啟檔案管理員,讓您存取其內容。您亦可以在桌面 (desktop) 或『電腦』(Computer, computer:///) 之類的資料夾找對應光碟的小圖示。然而在欠缺 X Window 的文字模式、伺服器環境或舊 X Window 系統中,就往往需要手動使用命令 mount。
在 Unix/Linux 要存取儲存裝置 (storage device)/檔案系統 (filesystem) 中的檔案或任何的內容,需要先掛載 (mount) 檔案系統至一個目錄後,才可以在該目錄中存取檔案系統中的檔案。而該目錄亦叫作掛載點 (mount point)。掛載檔案系統的工作一般是使用命令 mount 進行。
本文主要講解如何掛載直接連接電腦的儲存裝置。要存取網絡上的檔案,請參閱相關文章:
- 存取磁碟映像檔案
- 存取網絡上 Windows 系統上的檔案 - 透過 CIFS/SMB 存取網絡上 Windows 系統上的檔案
- 存取 NFS - 透過 NFS 存取網絡上 Unix/Linux 的檔案
簡單而言,掛載儲存裝置中的檔案系統的命令「mount -t 檔案系統類型 儲存裝置 掛載點」,例如:
mount -t iso9660 /dev/scd0 /media/cdrom
目录 |
識別儲存裝置
初學者遇到的第一個問題一般都是究竟要掛載的儲存裝置的裝置檔案名稱是什麼?如果您已知道了,請跳過本節到下一節《掛載 (mount)》。
在 Unix/Linux 世界中,每一個連接了的裝置都在目錄 /dev 中有一個對應的裝置檔案,例如 /dev/sda 代表了第一個 SATA/SCSI 硬碟。近年版本的 GNU/Linux 大都使用 libATA,包括 PATA/SATA/SCSI/USB/IEEE1394 等大部份儲存裝置一律採用統一的命名法 — /dev/sda 代表第一顆儲存裝置,一般亦是啟動系統的儲存裝置,第二個插入的儲存裝置會叫作 /dev/sdb,第三個則叫 /dev/sdc,以此類推。光碟機則一般叫 /dev/scd0等。
留意在舊或沒有使用 libATA 的 GNU/Linux 系統中,PATA 硬碟用 /dev/hda 或 /dev/hdb 等表示。/dev/hda 代表連接 PATA 第一排線 master 的硬碟,/dev/hdb 代表第一排線 slave,/dev/hdc 為第二排線 master,/dev/hdd 是第二排線 slave。第一排線只連接一顆硬碟時,就會沒有 /dev/hdb 但有 /dev/hdc 的情況。此外,這些 GNU/Linux 系統中的 PCMCIA/CF 的儲存裝置都會當成 PATA 裝置處理,裝置檔案很多時會變成 /dev/hde 或 /dev/hdf 等。
這可能令您很混亂,但如果有關儲存裝置是剛插入系統中,您可以查看 Linux 核心發出的訊息來獲知其裝置檔案的正確名稱。當有裝置被插入到電腦時,Linux 核心應該會感應到。您可以打「dmesg」查看核心的訊息,看看核心能否成功辯認到插入的裝置,並找出裝置分配到那個裝置檔案:
usb 2-2: new full speed USB device using uhci_hcd and address 2 usb 2-2: configuration #1 chosen from 1 choice Initializing USB Mass Storage driver... scsi0 : SCSI emulation for USB Mass Storage devices usbcore: registered new driver usb-storage USB Mass Storage support registered. Vendor: MATSHITA Model: DVD-RAM UJ-850S Rev: 1.20 Type: CD-ROM ANSI SCSI revision: 00 sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray Uniform CD-ROM driver Revision: 3.20 sr 0:0:0:0: Attached scsi generic sg0 type 5 usb 2-1: new full speed USB device using uhci_hcd and address 3 usb 2-1: configuration #1 chosen from 1 choice scsi1 : SCSI emulation for USB Mass Storage devices
以上內容顯示有一個 USB 光碟機插入電腦中,Linux 把它分配到裝置檔案 /dev/sr0。
usb 2-1: new full speed USB device using uhci_hcd and address 3 usb 2-1: configuration #1 chosen from 1 choice scsi1 : SCSI emulation for USB Mass Storage devices Vendor: KINGMAX Model: USB2.0 Flashdisk Rev: 2.00 Type: Direct-Access ANSI SCSI revision: 02 scsi 1:0:0:0: Attached scsi generic sg1 type 0 SCSI device sdb: 4030463 512-byte hdwr sectors (2064 MB) sda: Write Protect is off SCSI device sdb: 4030463 512-byte hdwr sectors (2064 MB) sdc: Write Protect is off sdb: sdb1
以上內容顯示有一張有 2GB 的 USB 2.0 快閃記憶卡插入電腦中,Linux 把它分配到裝置檔案 /dev/sdb,並偵出其有一個分割區 /dev/sdb1。
如果您的系統有 udev,您也可以看看目錄 /dev/disk/by-id 的內容。udev 會在目錄 /dev/disk/by-id 建立一些以裝置名稱為名的連結 (symbolic link) 指去實質的裝置檔案。以下是「ls -l /dev/disk/by-id」的結果:
總計 0 lrwxrwxrwx 1 root root 9 2007-11-20 09:46 ata-FUJITSU_MHT2030AT_NN6CT3B12W1D -> ../../sda lrwxrwxrwx 1 root root 10 2007-11-20 09:46 ata-FUJITSU_MHT2030AT_NN6CT3B12W1D-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 2007-11-20 09:46 ata-FUJITSU_MHT2030AT_NN6CT3B12W1D-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 2007-11-20 09:46 ata-FUJITSU_MHT2030AT_NN6CT3B12W1D-part5 -> ../../sda5 lrwxrwxrwx 1 root root 10 2007-11-20 09:46 ata-FUJITSU_MHT2030AT_NN6CT3B12W1D-part6 -> ../../sda6 lrwxrwxrwx 1 root root 9 2007-11-20 22:38 usb-KINGMAX_USB2.0_Flashdisk_59000000000056 -> ../../sdb lrwxrwxrwx 1 root root 10 2007-11-20 22:39 usb-KINGMAX_USB2.0_Flashdisk_59000000000056-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 10 2007-11-20 22:19 usb-MATSHITA_DVD-RAM_UJ-850S_DEF13BA9C057 -> ../../scd0
以上表示 ATA Fujitsu 硬碟指向 /dev/hda,Kingmax USB 快閃記憶卡指向 /dev/sda,Matshita 光碟機指向/dev/scd0。
如果在 dmesg 找不到和裝置相關的訊息,Linux 可能未能成功偵測您的儲存裝置。您可以試一試用 modprobe 載入上面提到的核心模組,再打「dmesg」看看有什麼進展:
modprobe usb_storage dmesg
如果仍然沒有進展,您需要檢查您的 Linux 核心是否為編譯相關模組或者更新您的 Linux 核心。
掛載 (mount)
要掛載儲存裝置中的檔案系統,可以使用命令「mount -t 檔案系統類型 儲存裝置 掛載點」[1],例如:
mount -t vfat /dev/sdb1 /mnt
掛載前,掛載點的目錄必需已經存在。完成後,您可以在掛載點的目錄 (如上例的 /mnt) 存取儲存裝置中的檔案。您亦可以使用命令 df 或 mount 確定檔案系統已成功被掛載:
$ mount /dev/sda6 on / type ext3 (rw,noatime,errors=remount-ro) ... binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) /dev/sdb1 on /mnt type vfat (rw)
或者:
$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda6 10317828 5018496 4775216 52% / ... tmpfs 1031792 216 1031576 1% /dev/shm /dev/sdb1 8315592 912476 7403116 11% /mnt
看見顯示以掛載儲存裝置為首的一行就表示掛載成功了。
掛載如快閃記憶卡或 USB/IEEE1394 硬碟等抽取式儲存裝置時,您未必知道裝置中檔案系統的類型。一般而言,CD-ROM/CD-R/CD-RW 一般使用 iso9660,DVD 使用 udf,其他如快閃記憶卡、USB 快閃記憶、USB 硬碟和 MP3 播放機等一般使用 vfat。如果您略去 -t 檔案系統類型 選項或使用 -t auto,令 mount 自動偵測檔案系統的類型:
mount /dev/sdb1 /mnt
這顯然對掛載抽取式儲存裝置有很大幫助。現代 GNU/Linux 中的 mount 會透 一般而言,mount 的偵測能力都很準確,但萬一 mount 使用錯誤的檔案系統類型掛載,有機會破壞當中的資料。
掛載成唯讀 (read-only, ro) 模式
除儲存裝置開啟了 write-protect 或儲存裝置為如 CD-ROM 等唯讀媒體,mount 命令掛載時預設使用讀寫 read-write, rw) 模式,讓使用者閱讀檔案系統的內容之餘,亦可以增加、刪除檔案或編輯檔案。然而,如果您想保護檔案系統內容,不想被人更改,您亦可以把整個檔案系統掛載成唯讀 (read-only) 模式,那無論檔案系統中的檔案權限為何,所有使用者包括系統管理員 root 都不能改變其內容。要掛載檔案系統成唯讀模式,只需要在 mount 命令加上 -r 或 -o ro 選項,例如:
mount -t ntfs -r /dev/sda1 /media/windows
或者:
mount -t vfat -o ro /dev/sdc1 /media/usbdisk
檔案系統類型
在 GNU/Linux 上,檔案系統類型可以是 (完整列表請參看《GNU/Linux 支援的檔案系統》:
- ext2 (Second Extended Filesystem) - 曾成為 GNU/Linux 預設檔案系統超過十年的檔案系統,穩定但沒有支援日誌 (journal) 功能。使用 ext2 作檔案系統類型掛載 ext3 或未使用 Extent 的 ext4 檔案系統可以停用日誌功能和避免使用日誌紀錄自動修復檔案系統。
- ext3 (Third Extended Filesystem) - Ext2 的後繼者,主要加入日誌 (journal) 功能,亦是現時大部份 GNU/Linux 的預設檔案系統。未使用 Extent 的 ext4 檔案系統可以使用 ext3 作檔案系統類型來掛載。
- ext4 (Fourth Extended Filesystem) - Ext3 的後繼者,主要加入 extent 等對其效能有很大提升的功能。Linux 由 2.6.28 開始正式支援,而 Fedora 早在 9 已開始支援。
- reiserfs (ReiserFS) - Hans Reiser 為 Linux 設計的高性能日誌式檔案系統 (journaling filesystem),善長處理小型檔案。
- xfs (SGI XFS) - 沿用在 SGI IRIX 多年的高性能日誌式檔案系統,被開放及移植至 Linux。善長處理大型檔案和 streaming。
- jfs (IBM jfs) - IBM OS/2 和 AIX 使用的高性能日誌式檔案系統,被開放及移植至 Linux。
- msdos (FAT) - MS-DOS/Win9x/WinME 和大部份記憶卡/USB 儲存裝置使用的檔案系統。但使用 msdos 作檔案系統類型來掛載就只能顯示和支援傳統的 8.3 短檔案名稱,所以最好使用 vfat。
- vfat (FAT) - 同樣是 MS-DOS/Win9x/WinME 和大部份記憶卡/USB 儲存裝置使用的 FAT 檔案系統,但支援長檔案名稱
- ntfs (NTFS) - Windows NT/2k/XP/2k3/Vista 使用的檔案系統。
- iso9660 - 大部份 CD-ROM/CD-R/CD-RW 使用的檔案系統。
- udf - 大部份 DVD 使用的檔案系統。
視乎內核編譯時的選項,個別 Linux 未必支援以上所有檔案系統。您可以查看檔案 /proc/filesystems 取得系統支援的檔案系統列表。沒有需要的檔案系統時,一般需重新編譯內核。
掛載選項
- async/sync/dirsync - 預設 async 表示使用非同步 (asynchronize) 輸入/輸出,sync 表示使用同步 (synchronize) 輸入/輸出。
- rw/ro - 預設 rw 表示許容讀寫裝置的內容,ro 表示唯讀模式,不容許改變內容。
- exec/noexec - 預設 exec 表示容許執行檔案系統中的程式,noexec 則拒絕執行。
- suid/nosuid - 預設 suid 表示容許使用 SUID/SGID,nosuid 表示不理會 SUID/SGID。
- dev/nodev - 預設 dev 表示連接檔案系統中的裝置檔案至所指的周邊裝置、nodev 表示不會理會檔案系統中的裝置檔案。
- atime/noatime/nodiratime/relatime
- atime(預設) - 每次讀取檔案/目錄內容時,更新檔案/目錄 inode 上的最後存取時間 (access time)
- noatime - 不會更新檔案 inode 上的最後存取時間。可以大大減輕檔案系統的負荷,但會令如 mutt 之類需要存取時間的應用程式不能正常運作。
- nodiratime - 不會更新目錄 inode 上的最後存取時間
- relatime - 每次讀取檔案/目錄內容時,只在檔案/目錄 inode 上原先的最後存取時間舊於最後修改時間 (modify time) 或更新時間 (change time) 才更新最後存取時間。可以減少對檔案系統的負荷,但不影響如 mutt 之類需要存取時間的應用程式。Linux 2.6.20 開始支援[2]
- mand/nomand - 容許使用 mandatory lock
- context
- fscontext
- defcontext
Ext2 掛載選項
- noacl/acl - 是否啟用 POSIX ACL,可以設定較複雜的檔案存取權限
- bsddf/minixdf
- error=錯誤處理方案 - 設定當檔案系統運作時發生問題所採取的處理方案,預設為 continue:
- continue - 繼續正常運作
- remount-ro - 重新掛載檔案系統成唯讀模式,可以令系統有限度地繼續運作但減低損害檔案系統資料的機會。
- panic - 令系統即時當機,可以令損害停止加劇。
- grpquota / noquota / quota / usrquota
- nouid32 - 停用 32-bit UID 和 GID,主要方便和只能處理 16-bit UID/GID 的舊 Linux 合作。
- resuid=n - 改變檔案系統保留儲存空間 (一般為 5%) 作修復工作之用中,可以使用此空間使用者的 UID,原本預設為 0 - 即系統管理員 root。
- resgid=n - 改變檔案系統保留儲存空間 (一般為 5%) 作修復工作之用中,可以使用此空間群組的 GID,原本預設為 0 - 即 root。
- sb=n
- user_xattr / nouser_xattr - 是否啟用使用者伸延屬性 (user extended attribute)。
- sysvgroup/nogrpid/bsdgroups/grpid - 決定新件檔案預設所屬群組的方案,可以為:
- sysvgroup 或 nogrpid(預設) - System V 模式,當在目錄以下新增檔案時,如果目錄沒有 SGID,新建檔案所屬的群組就變成執行程式的有效群組。如果目錄有 SGID,新建檔案所屬的群組就變成目錄的所屬群組。
- bsdgroups 或 grpid - BSD 模式,當在目錄以下新增檔案時,新建檔案所屬的群組就變成目錄的所屬群組。
Ext3 掛載選項
- noload - 掛載時不會自動依日誌紀錄修復檔案系統
- data=日誌模式 - 設定使用的日誌模式,預設為 ordered:
- journal - 無論 meta-data 更改或檔案資料更改都記錄在日誌中,可以提供最安全的資料保障。系統被突然中斷仍不會破壞一致性或掉失資料。但效率最慢。
- ordered -
- writeback -
- comment=nrsec - 每 nrsec 秒同步所有檔案內容和 meta-data。預設為 5 秒,使用 0 表示使用預設值。
- journal=inum - 指定日誌紀錄的 inode 編號
- journal=update - 如果個別 ext3 檔案系統的日誌紀錄仍使用最早期的舊格式,使用這選項可以升級至新格式。
FAT (msdos/vfat) 掛載選項
- blocksize=512|1024|2048 - 指定區塊大小
- uid=uid - FAT 檔案系統中的檔案沒月有所屬使用者,這選項可以所有檔案指定為 uid 使用者。預設為進行 mount 的使用者。
參考資料
- ↑ GNU/Linux Manpage: mount(8) - mount a filesystem


[SuSE][OpenSuSE] - GNU/Linux 中的 mount(8) 說明文件 - ↑ Corbet, Jonathan (2007). Once upon atime. Linux Weekly News.
相關頁面
- 卸載 (unmount)/退出檔案系統
- 配置檔案系統掛載
- 格式化存儲裝置
- 檢查檔案系統
- 設定常規檔案系統檢查
- 設定檔案系統的系統管理員保留空間
- 設定 Ext2/Ext3/Ext4 錯誤處理方案
- 顯示檔案系統標簽
- 改變檔案系統標簽
- 使用 UUID 管理檔案系統
- 顯示各磁碟的可用空間
相關連結
- 維基百科: Mount (computing) - 維基百科對電腦詞滙 Mount 的說明。
- 維基百科: mount (Unix) - 維基百科對 Unix 命令 mount 的說明。
- The Linux Information Project: Mounting definition (2006-03-09)
- Manpage (Manual Page)
- GNU/Linux Manpage: mount(8) - mount a filesystem


[SuSE][OpenSuSE] - GNU/Linux 中的 mount(8) 說明文件
- BSD Manpage: mount(8) - mount a filesystem


- FreeBSD/NetBSD/OpenBSD 中的 mount(8) 說明文件
- Solaris Manpage: mount(1M) - mount or unmount file systems and remote resources[Solaris] - Solaris 10 中的 mount(1M) 說明文件
- GNU/Linux Manpage: mount(8) - mount a filesystem

