Automounting
parted 是否自動掛載新分區?
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 所暗示的那樣,可以使用fdisk或gdisk等另一個工具代替****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部分。