返回文章列表

儲存裝置的識別與準備

在將任何儲存裝置整合至 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 指令來建立新的分割區。此指令會要求指定分割區的名稱、檔案系統類型(例如 xfsext4 等)、起始位置與結束位置。

(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 提供了多種檔案系統供選擇,常見的有 ext4xfsbtrfs 等。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 (讀寫)、suiddevexecautonouserasync
  • 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),不僅是技術上的最佳實踐,更是建立高穩定性運維文化的基石。