在Linux掛載儲存裝置的時候,你應該要用/mnt
還是/media
還是/run/media
路徑?
讓我們試圖回答這個問題。
並討論Linux系統常見的自動掛載硬碟手段。其實你不一定要手寫/etc/fstab!?在有安裝圖形介面的情況下,可以透過桌面環境的圖形界面設定自動掛載硬碟。
1. 如何列出Linux所有的儲存裝置#
對於Linux來說,所有的儲存裝置都是一個檔案。插入電腦之後,會統一出現在/dev/
之下,例如/dev/sda
、/dev/sdb
、/dev/sdc
。如果硬碟沒有檔案系統,使用者需要先將其格式化,建立檔案系統(例如EXT4、FAT32、BTRFS、NTFS),再用mount
指令,將/dev/sdX
裝置掛載到掛載點,才能存取裡面的資料。掛載點可能是由使用者自行建立的一個目錄,或者是系統服務自動幫你建立。
因此,在掛載硬碟的時候,要先確認的就是/dev/
的儲存裝置代號,再來規劃硬碟的掛載點。
指令工具:fdisk、lsblk、parted,例如fdisk -l
指令。這些工具也可以用來格式化硬碟。
圖形介面:Gparted、GNOME Disk、KDE Partition Manager。這些工具也可以用來格式化硬碟。
2. 硬碟掛載點的路徑標準#
事實上Linux的掛載系統很寬鬆,只要權限夠,你想挑哪個目錄當掛載點都行。譬如你可以將另一個硬碟/dev/sdb
掛載到目前系統的/home
,實現系統橫跨兩個硬碟儲存的操作。
不過萬事都要有個標準來遵循吧。
常見的掛載路徑選擇有/mnt
、/media
、/run/media
,他們有什麼差呢?
/mnt#
依照Linux基金會的檔案系統階層標準 FHS 3.0建議,/mnt
應該是臨時掛載檔案用的,只給系統管理員操作,比如mount一個chroot檔案系統或者ISO,短時間存取裡面的資料然後移除。
不過,對於個人電腦來說,由於通常只有一個使用者,因此限定系統管理員才能用的說法並不適用。所以其實沒有規定說/mnt
不能掛載硬碟。將硬碟掛載在這個路徑也能在用cd
指令的時候少打幾個字吧。但我覺得還是遵循FHS建議的標準較佳。
/media與/run/media#
依照Linux基金會的檔案系統階層標準 FHS 3.0建議,/media
是給一般使用者使用的,用於掛載可卸除的儲存媒介(不論他們是暫時性掛載或者是開機自動掛載),例如硬碟、光碟、USB隨身碟、SMB共享目錄等等。
部份桌面環境的服務會自動偵測使用者插入的卸除式儲存裝置,然後自動建立掛載點。比如GNOME的udisks。
那麼為什麼會有/media
與/run/media
的差異呢?有些發行版採用後者的理由是因為/run
這個路徑在每次重開機後都會清空,所以能夠保持系統整潔。每次重開機交由系統服務動態建立掛載點。反之如果是/media
的話,掛載點的目錄一旦建立就會一直存在,不論硬碟有無成功掛載,總是會有一個空目錄在那邊,長此以往將造成大量垃圾。
不過這兩個目錄的差異不大,端看發行版與桌面環境怎麼操作而已。
Ubuntu與Debian比較習慣使用/media/
Fedora與openSUSE則是會選取/run/media/
。
這個掛載路徑的選擇,反映在它們的套件編譯選項裡面,所以要套用另一個發行版的規則,可能得手動編輯路徑。
3. 使用圖形界面設定硬碟掛載規則#
講到掛載硬碟多半會想要手動編輯/etc/fstab
吧,但是在有安裝圖形介面的情況下,可以透過桌面環境的工具設定自動掛載硬碟的規則。它會根據使用者的儲存裝置情況,建議合適的掛載點並完成操作,最後將變更寫入到/etc/fstab
。
GNOME#
- GNOME 48是使用udisks和gvfs服務,應該已經隨GNOME桌面環境一同安裝。用以下指令確認服務狀態:
systemctl --user status udisks2
開啟磁碟 (GNOME Disk Utility) 程式
選取要掛載的硬碟。如果已經掛載,先按下暫停鍵取消掛載。
點選編輯掛載選項
取消勾選使用者工作階段預設值。
設定掛載規則。首先,設定識別為UUID,讓它以UUID為依據下去掛載硬碟,這樣可以防止因為換硬碟導致/dev/sda變化而無法掛載。然後掛載點的部份可以任意取名,建議設定為
/media/<使用者名稱>/<你喜歡的硬碟代號>
,不然的話自動依照UUID建立的掛載點一長串很醜。檔案系統設定為auto讓它自動判斷。點選播放鍵掛載硬碟。
掛載的硬碟會出現在檔案管理器的選單。
註解:udisks有時候會無視/etc/fstab
設定,自行掛載儲存裝置。這得透過udisksctl
指令調整。
KDE Plasma#
KDE Plasma 6需要使用者指定自動掛載的規則。
開啟KDE磁碟分割區管理員 (KDE Partition Manager)
選取要掛載的硬碟。如果已經掛載,先按下右鍵取消掛載。
按右鍵,編輯掛載點
識別方式選取UUID,讓它以UUID為依據下去掛載硬碟,這樣可以防止因為換硬碟導致/dev/sda變化而無法掛載。路徑就是掛載點,建議設定為
/media/<使用者名稱>/<你喜歡的硬碟代號>
。儲存變更。掛載硬碟。
掛載的硬碟會出現在檔案管理器的選單。
4. 手寫/etc/fstab設定硬碟掛載規則#
編輯/etc/fstab
,用於定義開機後的掛載規則。這是最傳統的做法,任何Linux發行版都適用。未來可能會流行systemd-mount
,藉由編輯多個服務檔來定義個別硬碟的掛載規則。不過在那之前用單一檔案定義全部規則的/etc/fstab
仍是最穩健的選擇。/etc/fstab
裡面所寫的規則,一定會在開機後自動掛載。
/etc/fstab
會要求你指定掛載點,那麼就以硬碟來說,建議的掛載點規則是這樣:
檔案系統UUID="" 掛載點 檔案系統類型 參數
關於最前面的檔案系統,傳統的作法是用/dev/sdX
,但考慮到硬碟有可能會抽換,導致/dev/sda
指向的不見得是原本的硬碟。比較好的方法是透過UUID來認硬碟,確保每次掛載的都是指向正確的硬碟。
用
blkid
指令列出所有硬碟分區的UUID。接著是掛載點的部份。選取
/media/
或/run/media
。在你使用/etc/fstab
的時候,/run
不會因為重開機清空而影響掛載。
路徑格式:/media/<使用者名稱>/<你喜歡的硬碟代號>
。如果你不知道怎麼取名,我會建議取名叫做HDD1
,或者以硬碟的型號下去命名,例如ST8000DX001
,再不濟就用UUID當掛載點名稱。
最後面的檔案系統類型與參數通常維持預設就好。
舉例來說,用
sudo lsblk
指令得出要掛載的硬碟路徑如下,它有一個EXT4的檔案系統:
/dev/sdb2: UUID="26c57dd3-de9f-4409-b385-cf218501a739" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="bf86f923-91f5-4c54-b8e4-33ecc6dfeb33"
- 然後我們預計要掛載到
/media/user/HDD1
,並允許所有使用者都能讀取與寫入。所以手動建立該掛載點,然後修改權限
sudo mkdir -p /media/user/HDD1
sudo chmod 777 /media/user/HDD1
- 編輯
/etc/fstab
sudo vim /etc/fstb
- 填入以下掛載規則
UUID=26c57dd3-de9f-4409-b385-cf218501a739 /media/user/HDD1 ext4 defaults 0 0
- 重開機,使用
lsblk
指令查看硬碟是否有自動掛載。
# 範例輸出
sdb 8:00 0 7.6T 0 disk
└─sdb1 8:00 0 7.6T 0 part /media/user/HDD1