2008-02-17

mount - 掛載儲存裝置指令

GNU/Linux 不像 Windows 有所謂的 C, D 槽,雖說同樣是樹狀結構,可 GNU/Linux 都是靠掛載 (mount) 磁區分割區 (partition) 來儲存資料及檔案,也就是說要是有某分個區空間不足時,可透過 mount 來自由擴充,就算是不同顆硬碟也行。

相信很多人都跟凍仁一樣是 Ubuntu + XP 雙系統在過生活,如果是先裝 XP 再安裝 Ubuntu,那 Ubuntu 會自動辨識其他的 partition,但不一定會自動掛載,雖說 Ubuntu 很人性化,但日後若更動硬碟的配置時還是得靠自己。

1. 裝置代號說明

凍仁新加的硬碟在 BIOS 的位置是 channel0 Slave (也就是第二順位),在 Ubuntu 裡就是 hdb,又因只切一個 partition,所以就是 hdb1

1.1 硬碟(hd, sd)

hdx
  • 順序:hd[a-d] 依序為第 1 到第 4 顆硬碟。
  • 主分割區 (Primary Partition):hda[1-4] 依序為第 1 顆硬碟的第 1 到第 4 個 partition。
  • 延伸分割區 (Extended Partition):若想使用 4 個以上的分割區,得先犧牲 1 個主分割區來做延伸分割區。
  • 邏輯分割區 (Logical Partition):hda[5-63] 是配置在延伸分割區之中的分割區,理論上最多可以使用到 59 個邏輯分割區。
sdx
  • 順序:sd[a-p] 依序為第 1 到第 16 顆硬碟。
  • 主分割區 (Primary Partition):sda[1-4] 依序為第 1 顆硬碟的第 1 到第 4 個 partition。
  • 延伸分割區 (Extended Partition):若想使用 4 個以上的分割區,得先犧牲 1 個主分割區來做延伸分割區。
  • 邏輯分割區 (Logical Partition):sda[5-15] 是配置在延伸分割區之中的分割區,理論上最多可以使用到 11 個邏輯分割區。

2011-12-28

印象中在 Ubuntu 8.04 開始統一改用 sdx 來表示硬碟的裝置代號,而不再使用 hd 了。然後也因為 GRUB2 支援在邏輯分割區使用 boot 及安裝系統的緣故,凍仁曾在同一顆硬碟裡安裝 6 個 OS 過,硬體不夠力才會這樣玩,好孩子別模仿啊

1.2 軟碟 (floppy)

在 Ubuntu 7.10 裡預設是 floppy0 ,再指向 floppy。

1.3 光碟 (cdrom)

在 Ubuntu 7.10 裡預設是 cdrom0 ,再指向 cdrom。

1.4 SD 卡 (mmcblk)

命名規則請參照硬碟。

1.5 網路磁碟 (sftp, ftp, WebDAV, SMB)

不在本文討論的範圍內,但若使用檔案管理員 (nautilus) 內的連接伺服器掛載其網路磁碟時,將會自動掛載到 $HOME/.gvfs/ 底下,以下為透過 ssh 連接的範例。
[ jonny@gutsy ~ ]
$ ls $HOME/.gvfs/ [Enter]
SFTP 以 jonny 於 192.168.11.1

2. mount 使用範例

2.1 掛載 /dev/sdb2 到 /media/data_ext3 並指定檔案系統為 Ext3。
[ jonny@gutsy ~ ]
$ sudo mount -t ext3 /dev/sdb2 /media/Data_Ext3 [Enter]

2.2 掛載 /dev/sda3 到 /media/data_ntfs 並指定檔案系統為 NTFS。
[ jonny@gutsy ~ ]
$ mount -t ntfs /dev/sda3 /media/Data_NTFS [Enter]

2.3 掛載 /dev/mmcblk0p1 到 /media/SD 並指定檔案系統為 vfat (FAT32)。
[ jonny@gutsy ~ ]
$ mount -t vfat /dev/mmcblk0p1 /media/SD [Enter]

2.4 掛載光碟映像檔。
[ jonny@gutsy ~ ]
$ sudo mount -t iso9660 -o loop ubuntu-7.10-desktop-i386.iso /media/iso [Enter]

2.4 參照 /etc/fstab 掛載分割區。
[ jonny@gutsy ~ ]
$ sudo mount -a [Enter]

註:以上的參數是可以省略的,但那是因為現代的 GNU/Linux 已經進步到會自動辨別檔案系統 (file system) 的緣故。

3. 開機自動掛載

mount 可以說是個好用又強大的指令,但它並沒有自我儲存的功能,不過我們可以透過修改 /etc/fstab 設定檔來實現開機自動掛載;GNU/Linux 裡還有個自動掛載的檔案系統 (autofs),它可以在真正用到時候再掛載。
[ jonny@gutsy ~ ]
$ sudo vi /etc/fstab [Enter]
# <file system> <mount point>   <type> <options> <dump> <pass>
#/dev/hdd1      /media/data      ntfs  defaults,utf8,umask=007,gid=46  0  1
/dev/sdb2       /media/Data_Ext3 ext3  defaults    0      0
/dev/sda3       /media/Data_NTFS ntfs  defaults    0      0
/dev/mmcblk0p1  /media/SD        vfat  defaults    0      0

各欄說明:
  • file system:磁碟裝置代號或該裝置的 Label。
  • mount point:掛載點。
  • type:磁碟分割區的檔案系統。
  • options:檔案系統參數。
  • dump:能否被 dump 備份指令作用。
  • pass:是否以 fsck 檢驗磁區。

註:以上掛載點在掛載之前必須先確認是否有該目錄,否則會有掛載點不存在 (mount point does not exist) 的錯誤訊息!

2008-04-02

卸載指令為 umount。
[ jonny@gutsy ~ ]
$ umount /media/cdrom [Enter]


2016-01-18


在使用 RAID 或混用 IDE, SATA 的情況下使用以上的方式撰寫 fstab 時可能會照成 partition 跑掉的情形,建議大家改用 UUID 的方式來撰寫。

1. 查看各個 partition 的 UUID。
[ jonny@trusty ~ ]
$ ls -l /dev/disk/by-uuid/ [Enter]
total 0
lrwxrwxrwx 1 root root 11 Jan 14 17:07 8ec5107a-d939-43fb-b328-1cb9bfe28686 -> ../../sda1
lrwxrwxrwx 1 root root 11 Jan 14 17:07 e5b15aff-f989-4d87-87dd-d0fa31e974b5 -> ../../sdb1
...

2. 使用 UUID 的方式改寫 fstab。
[ jonny@trusty ~ ]
$ sudo vim /etc/fstab [Enter]
...
UUID=8ec5107a-d939-43fb-b328-1cb9bfe28686 /                ext4 defaults,discard 0 0
UUID=e5b15aff-f989-4d87-87dd-d0fa31e974b5 /var/lib/docker/ ext4 defaults         0 0

資料來源:
鳥哥的 Linux 私房菜 - 開機掛載 /etc/fstab 及 /etc/mtab

延伸閱讀:
硬碟分割的基本概念 - Mobile01
Ubuntu 掛載 Windows 分割區
威聯通科技股份有限公司(QNAP Systems Inc.) - 如何透過 WebDAV 遠端存取您的 NAS