簡単に言えば、起動時にこれをすべて自動的に実行する必要があります(組み込みシステム)。
当社のエンジニアが画像を製品デバイスにフラッシュします。これらのイメージには、小さなパーティションテーブルが含まれます。ブート時に、最後のパーティション(#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番目のパーティションの後に利用可能な動的サイズのスペースで機能する必要があります。
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/.../
_から値を取得することもできます。ただし、parted
はresize
コマンドを削除したため、2つの手順を実行する必要があります。パーティションを拡張するためにresizepart
と、_resize2fs
_ for _ext*
_。
別れを適切にスクリプト化できないため(パーティションがマウントされていて、他の回答とは逆に-1s
または100%
が理解できなかったため、確認を求めました)、単に growpartツール これはまさにこれを行います。
使い方は簡単です:growpart /dev/sda 3
(そしてresize2fs /dev/sda3
、または使用するファイルシステムタイプに適した別のコマンド)。
DebianとUbuntuでは cloud-guest-utils としてパッケージ化されています。
これを行う正しい方法は、partedにパーセンテージの概念があるという事実を使用することです。そう
parted /dev/sda resize 3 100%
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からのクエリを抑制するために行いました。