web-dev-qa-db-ja.com

バッチモードでpartedを使用して、すべての未割り当て領域を使用するように最後のパーティションを自動拡張します

簡単に言えば、起動時にこれをすべて自動的に実行する必要があります(組み込みシステム)。

当社のエンジニアが画像を製品デバイスにフラッシュします。これらのイメージには、小さなパーティションテーブルが含まれます。ブート時に、最後のパーティション(#3)を自動的に拡張して、ディスク上のすべての使用可能なスペースを使用する必要があります。

ディスクの空き容量を確認すると、次のようになります。

> parted /dev/sda print free
Model: Lexar JumpDrive (scsi)
Disk /dev/sda: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  25.3MB  24.2MB  fat16        primary  legacy_boot
        25.3MB  26.2MB  922kB   Free Space
 2      26.2MB  475MB   449MB   ext4         primary
 3      475MB   1549MB  1074MB  ext4         primary
        1549MB  32.0GB  30.5GB  Free Space

パーティション3をN(30.5GB)バイト数拡張する必要があります

この手順をプロンプトなしで自動的に実行するにはどうすればよいですか?これは、3番目のパーティションの後に利用可能な動的サイズのスペースで機能する必要があります。

22
Paul Knopf

partedの現在のバージョンでは、resizepartがパーティションで機能する必要があります(partedは_100%_または_-1s_のようなものを理解しますが、後者も_--_は、cmdlineのオプションの解析を停止します)。正確な値を判別するには、_unit s_、_print free_を使用できます。 _resize2fs_は、ファイルシステム用に後に追加されます。


古いバージョンのpartedには、パーティションとファイルシステムの両方のサイズを一度に変更するresizeコマンドがあり、vfatでも機能しました。

Kobo ereaderの変更では、これを使用して内部メモリの3番目のパーティションのサイズを最大に変更しました(4番目のパーティションとmsdosテーブルがないことを盲目的に想定しています)。

_start=$(cat /sys/block/mmcblk0/mmcblk0p3/start)
end=$(($start+$(cat /sys/block/mmcblk0/mmcblk0p3/size)))
newend=$(($(cat /sys/block/mmcblk0/size)-8))

if [ "$newend" -gt "$end" ]
then
    parted -s /dev/mmcblk0 unit s resize 3 $start $newend
fi
_

したがって、カーネルがサポートしている場合は、_/sys/block/.../_から値を取得することもできます。ただし、partedresizeコマンドを削除したため、2つの手順を実行する必要があります。パーティションを拡張するためにresizepartと、_resize2fs_ for _ext*_。

24
frostschutz

別れを適切にスクリプト化できないため(パーティションがマウントされていて、他の回答とは逆に-1sまたは100%が理解できなかったため、確認を求めました)、単に growpartツール これはまさにこれを行います。

使い方は簡単です:growpart /dev/sda 3(そしてresize2fs /dev/sda3、または使用するファイルシステムタイプに適した別のコマンド)。

DebianとUbuntuでは cloud-guest-utils としてパッケージ化されています。

19
Ivo Smits

これを行う正しい方法は、partedにパーセンテージの概念があるという事実を使用することです。そう

parted /dev/sda resize 3 100%
7

Ubuntu 18.04では、スクリプトの未割り当て領域を次のように埋めるためにサイズを変更できます。

Sudo parted -s /dev/sdb "resizepart 2 -1" quit
Sudo mount -av
Sudo umount /dev/sdb2
Sudo mount /dev/sdb2 /mnt
Sudo resize2fs /dev/sdb2

サイズを変更する前にマウントする必要がない場合があります。ユーザー入力のresize2fsからのクエリを抑制するために行いました。

0
Nolan Zinn