Bash

如何在 bash 腳本中使用 sgdisk 分區來確定大小

  • November 11, 2019

我在類似於以下的 bash 腳本中使用 sgdisk:

sgdisk --clear /dev/vda --set-alignment=1 --new 1:34:2047 --typecode 1:EF02 -c 1:"grub"  -g /dev/vda
sgdisk --new 2:2048:16779263 --typecode 2:8300 -g /dev/vda
sgdisk --new 3:16779264:20971486 --typecode 3:8200 -g /dev/vda

這僅在設備事先眾所周知並且扇區是硬編碼的情況下才有效。

我想刪除扇區值的硬編碼。相反,我希望腳本在腳本執行之前不知道磁碟大小時工作。分區 1 製作完成後,我會留出一個已知的固定數量給分區 3 進行交換,剩下的給分區 2。

簡單的方法是創建交換分區#2。我知道該怎麼做。但是,我想看看是否可以在保持交換分區 3 的同時執行此操作。這意味著 sgdisk 必須計算分區 2 的大小或結束扇區值,同時考慮下一步將分配給分區 3 的大小。

閱讀 sgdisk 手冊頁並沒有給我有關如何執行此操作的線​​索(或者即使可以完成)。

以下將起作用:

sgdisk --clear /dev/vda --set-alignment=1 --new 1:34:2047 --typecode 1:EF02 -c 1:"grub"  -g /dev/vda
sgdisk --new 2:0:-2G --typecode 2:8300 -g /dev/vda
sgdisk --new 3:0:0 --typecode 3:8200 -g /dev/vda

這比我想像的要簡單得多。sgdisk做所有的計算。關鍵是減號,它在手冊頁中有解釋(我之前錯過了)。

您可以通過在數字前加上“+”或“-”符號來指定相對於指定預設範圍的開始或結束的位置,如 +2G 指定預設起始扇區後 2GiB 的點,或 -200M 指定在最後一個可用扇區之前 200MiB 點。開始或結束值 0 指定預設值,

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