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


19

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

弊社のエンジニアが本番デバイスに画像をフラッシュします。これらのイメージには、小さなパーティションテーブルが含まれます。ブート時に、最後のパーティション(#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番目のパーティションの後に使用可能な動的サイズのスペースで動作する必要があります。


試用せずにすぐに使えるスクリプトを受け取ることを期待しないでください!それでは、今まで何を試してみましたか?あなたがリサイズされていることを、パーティションが動作中にマウントされていませんしなければならないもう一つ....
ルチアーノ・アンドレスマティーニ

私はresizepartコマンドを試しましたが、動作しますが、正確なサイズが必要です。動的である必要があります。
ポールKnopfの

resize2fs私が探しているものかもしれません。linux.die.net/man/8/resize2fs
ポールKnopfの

回答:


21

の現在のバージョンではpartedresizepartパーティションで動作するはずです(parted理解する100%-1s、のようなもの--は、コマンドラインの解析オプションを停止する必要もあります)。あなたが使用することができ、正確な値を決定するためにunit sprint freeresize2fsその後、ファイルシステムのために来ます。


の古いバージョンに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のためext*


これはまさに私が探していたものです。ご協力いただきありがとうございます!
ポール・ノップ

側の質問、最後の8バイトは何ですか?
ポールKnopfの

単一のセクターによるサイズ変更を避けてください...それを-40または何か(ディスクの終わりのGPTバックアップヘッダー)に変更する必要があります。
frostschutz

partedコマンドラインからの自動拡張をサポートしていませんか?そのため、それがない対話的にそれをサポートしています。インタラクティブに実行する場合、GPTパーティションテーブルを修正してディスクのサイズ(タイプfix)に一致させるかどうかを尋ねられますresizepart 3 -1。実行できます。私はコマンドラインからそれを実現する方法を見つけようとしてきました。
ハーベイ

それほど速くない:resizeコマンドはparted 3.0で削除されました。sfdiskまたはgpartedを試してください。
GregD

15

パーティションを適切にスクリプト化できなかったため(パーティションがマウントされたため確認を求めましたが、他の答えとは反対に理解できなかった、-1sまたは100%)、まさにこれを行うgrowpartツールが見つかりまし

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

DebianおよびUbuntuでは、次のようにパッケージ化されています cloud-guest-utilsます。


これは、私が今すぐ見つけられる最も便利な方法です。それは見事に機能しました。
SebiF

これは私のためのソリューションだった-別れ...ファイルシステムとしてext4は好きではなかった、とファイルシステムのサイズを変更しようと、それを回避する手立てがないように見えた
アンティHaapala

Ubuntu 18.04で動作しない
-DreamFlasher

@DreamFlasherなぜそれがあなたにとってうまくいかなかったのかわかりません。私が見る限り、cloud-guest-utilsパッケージをインストールすることができます。これはgrowpartが提供する唯一の機能であるため、バグがない限り機能するはずです、間違って使用されているか、制御不能なものが間違っています。最後の引数(この例では3)は、1からカウントされるサイズ変更されるパーティションであり、この方法でサイズ変更できるようにするには、パーティションの直後に十分なスペースが必要であることに注意してください。
Ivo Smits

7

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

parted /dev/sda resize 3 100%

1
時代遅れ、Ubuntu 18.04以降では動作しません
DreamFlasher

resizeコマンドはpartedバージョン3で若干廃止されました。resizepartコマンドを使用してから、使用しているファイルシステムまたはPVを個別にサイズ変更する必要があります。ext4の場合、コマンドはresize2fs、またはXFSの場合、xfs_growfsです。どちらもファイルシステムがマウントされたときに通常行われ、引数は両方の場合のマウントポイントです。
ジョナサンバザード

0

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からのクエリを抑制するためにしました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.