Partition

如何縮小 LUKS 分區,cryptsetup resize 有什麼作用?

  • November 28, 2020

我正在調整包含單個 ext4 文件系統(沒有 LVM 或其他東西)的 LUKS 加密分區的大小。cryptsetup FAQ建議刪除舊分區並重新創建它,但這聽起來很浪費時間。因此,我想手動進行,仔細調整分區的大小。

到目前為止,我認為我需要這樣做:

  1. 創建文件系統的(加密)備份。重要的!在執行以下任務時,您不會是第一個失去數據的人。
  2. 解除安裝現有的 ext4 文件系統(例如通過啟動到 Live CD)。如果從 Live CD 啟動,請使用以下命令掛載加密分區cryptsetup luksOpen /dev/sdXY ExistingExt4
  3. 調整現有 ext4 文件系統的大小
  4. cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
  5. 使用關閉/“解除安裝”LUKS分區cryptsetup luksClose ExistingExt4
  6. 縮小分區大小。

以上步驟正確嗎?

在第 4 步中,我應該選擇$SECTORS什麼?這一步甚至是必要的嗎?cryptsetup手冊頁並沒有真正描述該選項resize

resize <name>
   resizes an active mapping <name>.
   If --size (in sectors) is not specified, the size of the underlying
   block device is used.

最後,如果我將 ext4 分區縮小 15 GiB,我可以安全地假設可以使用 15 GiB 從現有分區中刪除parted嗎?如果是,該怎麼做?我的磁碟是 GPT 分區的,如果這很重要的話。

備份(步驟 1)和解除安裝(2 到 3 之間)後,執行fsck以確保文件系統是健康的:

e2fsck -f /dev/mapper/ExistingExt4

除此之外,步驟還可以。

cryptsetup resize命令的目的

我應該為 $SECTORS 選擇什麼?這一步甚至是必要的嗎?

這一步是必要的,否則分區仍然會出現在舊的一側。Nautilus 確認了這一點,即使使用 調整大小後resize2fs,LUKS 分區仍顯示為舊大小。執行後cryptsetup resize,顯示正確的數字。 **此步驟不是必需的。**它只影響文件瀏覽器中顯示的目前大小狀態。更改大小並再次關閉/打開分區後,數字將恢復。因此,當關閉 LUKS 分區時,如後所示將使其過時。

$SECTORS可以通過查看輸出來確定cryptsetup status ExistingExt4

/dev/mapper/ExistingExt4 處於活動狀態。
類型:LUKS1
密碼:aes-cbc-essiv:sha256
密鑰大小:256 位
設備:/dev/sda2
扇區大小: **512**
偏移量:2056 個扇區
大小: **156049348 個**扇區
模式:讀/寫

(截至cryptsetup 2.0.0(2017 年 12 月),扇區大小可能大於 512 字節:請參閱cryptsetup(8)手冊頁--sector-size選項。)

因此,要減去 15 GiB,請使用扇區大小156049348 - 15 * 1024 * 1024 * 2 = 124592068

cryptsetup resize ExistingExt4 -b 124592068

調整分區大小parted

至於調整分區大小,parted適用於 GPT 分區。但是,該resize命令不起作用,作為一種解決方法(或解決方案),刪除分區資訊並創建一個新分區,受http://ubuntuforums.org/showthread.php?p=8721017#post8721017的啟發:

# **cryptsetup luksClose ExistingExt4** 
# **parted /dev/sda2**
GNU Parted 2.3
使用 /dev/sda
歡迎來到 GNU Parted!鍵入“幫助”以查看命令列表。
(parted)**單位 s** 
(parted) **p**
型號:ATA INTEL SSDSA2CW08 (scsi)
磁碟 /dev/sda: 156301488s
扇區大小(邏輯/物理):**512B/512B**
分區表:gpt

編號 開始 結束 大小 文件系統 名稱 標誌
1 34s 2082s 2049s 啟動 bios_grub
3 2083s 250034s 247952s ext2 RootBoot
**2 250035s 156301438s 156051404s 一切**

由於必須削減 15 GiB,因此新的端變為156301438 - 15 * 1024 * 1024 * 2 = 124844158. 由於我想更改分區 2,我首先必須將其刪除,然後使用標籤“Everything”重新創建它(如果您願意,可以更改)。注意:此磁碟具有 GPT 佈局。對於 MBR,您應該替換Everythingprimaryextended(未經測試,在 MBR 上調整分區大小尚未經過測試,因此推薦,因為它未經測試)。

警告:以下命令已破壞數據。不要在不了解發生了什麼的情況下複製它。必須更改扇區尺寸,否則您破壞您的分區。我對你的愚蠢不負責任,在你的數據冒險之前備份你的數據到第二個儲存介質。

(分開) **rm 2** 
(分開) **mkpart Everything 250035s 124844158s**
警告:生成的分區未正確對齊以獲得最佳性能。
忽略/取消?**忽略**
(分開)**p**
型號:ATA INTEL SSDSA2CW08 (scsi)
磁碟 /dev/sda: 156301488s
扇區大小(邏輯/物理):512B/512B
分區表:**gpt**

編號 開始 結束 大小 文件系統 名稱 標誌
1 34s 2082s 2049s 啟動 bios_grub
3 2083s 250034s 247952s ext2 RootBoot
2 250035s **124844158s 124594124s** 一切
(分開)**退出**

在上面的parted例子中,我的扇區沒有對齊,這是之前安裝的一個錯誤,不要太在意。

這就對了!您可以使用cryptsetup statusandfile -Ls /dev/...驗證一切正常,然後重新啟動。

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