儲存裝置的識別與準備
在將任何儲存裝置整合至 Linux 系統之前,首要任務是準確識別該裝置的系統名稱。這通常涉及觀察系統日誌,以確認新插入裝置的掛載點與名稱。
裝置名稱的識別流程
當一個新的儲存裝置,例如 USB 隨身碟,被連接至系統時,Linux 核心會記錄相關的事件。透過追蹤系統日誌(例如使用 journalctl -f 指令),我們可以觀察到裝置被偵測到的訊息,其中會包含其在系統中的唯一識別符號,常見的格式如 /dev/sdX,其中 X 代表磁碟的字母順序(如 a, b, c 等),而 /dev/sdXN 則代表該磁碟上的第 N 個分割區。
舉例來說,當我們插入一個 SanDisk Ultra 品牌的 USB 隨身碟後,系統日誌可能會顯示類似以下的訊息:
kernel: usb 4-1: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
...
kernel: sd 6:0:0:0: [sdb] Attached SCSI removable disk
...
udisksd[809]: Mounted /dev/sdb1 at /run/media/chris/7DEB-B010 on behalf of uid 1000
從上述輸出中,我們可以推斷出該 USB 裝置被識別為 /dev/sdb,並且其上已存在一個名為 /dev/sdb1 的分割區,且已被自動掛載至 /run/media/chris/7DEB-B010。
重要提示: 在進行任何磁碟操作前,務必再三確認裝置名稱,以免誤操作導致重要資料的遺失。一旦變更被套用到磁碟上,將難以復原。
裝置的預處理:卸載與清除
若新裝置被系統自動掛載,在進行分割操作前,必須先將其卸載。這可以透過 mount | grep <裝置名稱> 指令來查找掛載點,然後使用 umount <掛載點> 指令來執行卸載。
磁碟分割工具:Parted 的應用
GNU Parted 是一個功能強大的磁碟分割工具,它能夠處理各種分割表格式(如 MBR 和 GPT),並提供豐富的指令來管理磁碟分割。
建立新的分割表與分割區
進入 Parted 的互動模式後,我們可以透過 mklabel 指令來建立新的分割表。對於現代系統,建議使用 gpt(GUID Partition Table)格式,它支援更大的磁碟容量並提供更好的擴展性。
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
接著,使用 mkpart 指令來建立新的分割區。此指令會要求指定分割區的名稱、檔案系統類型(例如 xfs、ext4 等)、起始位置與結束位置。
(parted) mkpart alldisk xfs 1M 123GB
此範例將建立一個名為 alldisk 的分割區,使用 xfs 檔案系統,從磁碟的 1MB 位置開始,延伸至 123GB 的結束位置。
移除現有分割區
若儲存裝置上已存在分割區,且需要重新配置,可使用 rm 指令來移除。
(parted) p # 顯示現有分割區
Model: SanDisk Ultra (scsi)
Disk /dev/sdb: 123GB
...
Number Start End Size Type File system Flags
1 16.4kB 123GB 123GB primary fat32 lba
(parted) rm
Partition number? 1 # 指定要移除的分割區編號
@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_
skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100
rectangle "儲存裝置" as StorageDevice {
[磁碟分割工具] as DiskTool
[系統日誌] as SystemLog
}
StorageDevice -- SystemLog : 偵測事件
SystemLog --> DiskTool : 提供裝置名稱
rectangle "Parted 操作" as PartedOps {
[識別裝置] as IdentifyDevice
[卸載裝置] as UnmountDevice
[建立分割表] as CreateLabel
[建立分割區] as CreatePartition
[移除分割區] as RemovePartition
}
DiskTool --> IdentifyDevice
DiskTool --> UnmountDevice
DiskTool --> CreateLabel
DiskTool --> CreatePartition
DiskTool --> RemovePartition
CreateLabel --|> gpt : 建議格式
CreatePartition --|> xfs : 檔案系統範例
CreatePartition --|> ext4 : 檔案系統範例
parted(parted)
@enduml
看圖說話:
此圖示描繪了儲存裝置在高階配置中的核心流程。首先,系統日誌扮演著偵測新插入儲存裝置的角色,並將相關事件傳遞給磁碟分割工具,例如 Parted。磁碟分割工具隨後利用這些資訊來識別裝置,並在必要時執行卸載操作。接著,使用者透過 Parted 指令來進行磁碟分割表的建立,其中建議採用 GPT 格式以獲得更好的相容性與擴展性。之後,可以進一步使用 mkpart 指令來建立新的分割區,並指定其檔案系統類型(如 XFS 或 EXT4)以及空間範圍。若需重新配置,則可透過 rm 指令移除現有的分割區。整個流程強調了精確識別、安全操作以及利用專業工具進行高效管理的必要性。
檔案系統的建立與掛載
在完成磁碟分割後,下一步是為每個分割區建立檔案系統,並將其掛載到系統的指定目錄。
建立檔案系統
Linux 提供了多種檔案系統供選擇,常見的有 ext4、xfs、btrfs 等。mkfs 系列指令用於建立檔案系統。例如,使用 mkfs.xfs 指令在 /dev/sdb1 上建立 XFS 檔案系統:
sudo mkfs.xfs /dev/sdb1
若要建立 ext4 檔案系統,則使用 mkfs.ext4:
sudo mkfs.ext4 /dev/sdb1
掛載檔案系統
建立檔案系統後,需要將其「掛載」到系統中的某個目錄,才能開始存取其中的資料。掛載點是一個已存在的目錄,檔案系統的根目錄將會被放置在這個目錄下。
首先,建立一個掛載點目錄:
sudo mkdir /mnt/mydisk
然後,使用 mount 指令將分割區掛載到該目錄:
sudo mount /dev/sdb1 /mnt/mydisk
持續掛載設定
為了讓系統在重新啟動後仍能自動掛載該分割區,需要修改 /etc/fstab 文件。這是一個記錄系統開機時需要掛載的檔案系統列表的文件。
在 /etc/fstab 中,每一行代表一個掛載點,格式如下:
<裝置或 UUID> <掛載點> <檔案系統類型> <掛載選項> <dump> <fsck>
例如,若要讓 /dev/sdb1 在開機時自動掛載到 /mnt/mydisk,且使用 xfs 檔案系統,則可以添加以下行:
/dev/sdb1 /mnt/mydisk xfs defaults 0 2
其中:
/dev/sdb1:指定要掛載的裝置。/mnt/mydisk:指定的掛載點。xfs:檔案系統類型。defaults:一組預設的掛載選項,通常包含rw(讀寫)、suid、dev、exec、auto、nouser和async。0:表示在進行檔案系統備份時,該分割區不被dump工具處理。2:表示在系統檢查時,該分割區的檢查順序(0 表示不檢查,1 表示根分割區,2 表示其他分割區)。
注意: 直接使用裝置名稱 /dev/sdb1 雖然方便,但若系統中新增了其他儲存裝置,裝置名稱可能會改變。更穩健的做法是使用分割區的 UUID(Universally Unique Identifier)。可以使用 blkid 指令來查詢分割區的 UUID。
sudo blkid
查詢到 UUID 後,將其填入 /etc/fstab 文件中,例如:
UUID="your-partition-uuid" /mnt/mydisk xfs defaults 0 2
@startuml
!define DISABLE_LINK
!define PLANTUML_FORMAT svg
!theme _none_
skinparam dpi auto
skinparam shadowing false
skinparam linetype ortho
skinparam roundcorner 5
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam defaultFontSize 16
skinparam minClassWidth 100
rectangle "分割區" as Partition {
[分割區1] as Part1
[分割區2] as Part2
}
rectangle "檔案系統建立" as FilesystemCreation {
[mkfs.xfs] as MkfsXfs
[mkfs.ext4] as MkfsExt4
}
Partition --> FilesystemCreation : 建立檔案系統
FilesystemCreation --> Part1 : 建立 XFS
FilesystemCreation --> Part2 : 建立 EXT4
rectangle "系統掛載" as SystemMount {
[建立掛載點] as CreateMountPoint
[mount 指令] as MountCommand
[/etc/fstab 設定] as FstabConfig
}
Part1 --> SystemMount : 掛載
Part2 --> SystemMount : 掛載
CreateMountPoint --> MountCommand : 準備掛載點
MountCommand --> FstabConfig : 永久設定
rectangle "掛載資訊" as MountInfo {
[裝置/UUID] as DeviceOrUUID
[掛載點] as MountPoint
[檔案系統類型] as FsType
[掛載選項] as MountOptions
}
FstabConfig ..> MountInfo : 記錄資訊
@enduml
看圖說話:
此圖示闡述了從磁碟分割完成後,如何建立並管理檔案系統的過程。首先,已分割好的磁碟分割區是基礎,接著透過 mkfs 系列指令,可以在這些分割區上建立不同類型的檔案系統,例如 XFS 或 EXT4。完成檔案系統的建立後,系統需要將這些檔案系統「掛載」到特定的目錄,以便使用者能夠存取。這個掛載過程可以分為臨時掛載(使用 mount 指令)與永久掛載。永久掛載的設定是透過修改 /etc/fstab 文件來實現,該文件記錄了系統啟動時需要自動掛載的檔案系統資訊,包括裝置的識別符(裝置名稱或 UUID)、掛載點、檔案系統類型以及各種掛載選項。這個流程確保了資料的可用性與系統的持續運行。
結論
縱觀現代系統架構的動態挑戰,這套標準化的儲存管理流程,其價值遠不止於技術操作的精確性。更深層的意義,在於從裝置識別的謹慎、分割策略的規劃,到檔案系統掛載的永久化設計,完整體現了一種預防性、系統性的管理思維。相較於僅求快速上線的臨時性操作,採用 UUID 這類穩定標識符的作法,正是區分業餘與專業的分水嶺;它預先排除了因裝置順序變動而引發的系統性風險,將「韌性」從一個抽象概念,轉化為具體的技術實踐。
展望未來,隨著基礎設施即代碼(IaC)與自動化運維的普及,對這些底層指令的深刻理解將變得更為關鍵。它們不再只是手動執行的命令,而是構成 Ansible Playbook 或 Terraform 配置中,確保部署一致性與可重現性的核心邏輯。
玄貓認為,對於追求系統長期韌性與可維護性的管理者而言,將此流程內化為團隊的標準作業程序(SOP),不僅是技術上的最佳實踐,更是建立高穩定性運維文化的基石。