Automounting

parted 是否自動掛載新分區?

  • March 27, 2018

parted 創建新分區似乎有一個不希望的副作用,如果該分區以前存在,它將自動掛載,甚至在它被格式化之前。

這對於一個腳本來說很麻煩,例如:

parted -sm /dev/sdb mklabel gpt
parted -sm /dev/sdb mkpart primary ext4 1 1.8T
mkfs.ext4 -L drive /dev/sdb1

mkfs 在這裡失敗,因為分區已掛載。

在 CentOS 7 中觀察到此行為,當目標磁碟自上次啟動以來已被格式化並掛載時

解除安裝,刪除和掛載點目錄中的條目/etc/fstab,仍然觸發條件;將創建掛載點並自動掛載分區。

目前尚不清楚誰創建了掛載點目錄或 parted 從哪裡獲取資訊。

在 fstab 清除和 parted 呼叫之間重新啟動將解決此問題。parted 中沒有關於自動安裝的記錄參數。

那麼這種行為對於 parted 來說是否正常,是否有可靠的方法來防止它自動安裝?

經過一些徹底的測試,截至 2018 年 3 月,答案是parted無法阻止systemd在重新創建後自動重新掛載分區,除非事先在 /etc/fstab 中明確配置了 noauto。

解決方法

正如@AB 所暗示的那樣,可以使用fdiskgdisk等另一個工具代替****parted在重新創建之前正確清除分區資訊。唯一的缺點是這些工具使用互動式外殼,並且不是為腳本中的批處理而設計的。

互動模式

# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
 MBR: protective
 BSD: not present
 APM: not present
 GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-3907029134, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-3907029134, default = 3907029134) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): w

Final checks complete. About to write GPT data.
THIS WILL OVERWRITE EXISTING PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

管道自動化

這不是超級乾淨或便攜,但可以通過逐行管道使用者輸入來實現相同的結果。與互動模式一樣,空行將接受 gdisk 提供的預設值,在這種情況下最大化分區使用並為 Linux 系統選擇正確的類型。

echo -ne 'o\nY\nn\n\n\n\n\nw\nY\n' | gdisk /dev/sda

SystemD 監控

在執行gdisk時,我們檢查 dmesg 的掛載活動,並觀察到只有幾個設備資訊請求:

kern  :info  : [Mar27 10:38]  sda: sda1
kern  :info  : [  +1.019077]  sda: sda1

所以使用這種方法,我們的自動化腳本可以安全地繼續mkfs部分。

引用自:https://unix.stackexchange.com/questions/432850