GNU partedがユーザー入力を待機しないように、yes
コマンドを使用したいと思います。
root@195-xxx-xxx-xxx:/proc# parted /dev/sda unit B resizepart 2 1166016512B
Warning: Shrinking a partition can cause data loss, are you sure you want
to continue?
Yes/No? y
Information: You may need to update /etc/fstab.
root@195-xxx-xxx-xxx:/proc# echo $?
0
ただし、ここでyes
を使用しても機能しません。
root@195-xxx-xxx-xxx:/proc# yes | parted /dev/sda unit B resizepart 2 166016512B
Warning: Shrinking a partition can cause data loss, are you sure you
want to continue?
root@195-xxx-xxx-xxx:/proc# echo $?
1
編集:
--script
オプションも機能しません:
root@195-xxx-xxx-xxx:/proc# parted --script /dev/sda unit B resizepart 2 1166016512B
Warning: Shrinking a partition can cause data loss, are you sure you
want to continue?
root@195-xxx-xxx-xxx:/proc# echo $?
1
resizepart
が機能しない場合、rm
とmkpart
を使用して同じことを行う必要がある場合があります。
もちろん、パーティションタイプと開始オフセットを決定するために、最初にパーティションテーブルを解析する必要があります。必要な値がわかっている場合を除きます。結局のところ、166016512B
どこからでも。
parted
には--machine
オプションを使用すると、簡単に解析できる出力を生成できます。一方、実際に構文解析する例は簡単には見つかりません。 ;)
私の場合、tty-less SSHセッション内からParted 3.2を使用していました。分離されたコードには次のテストがあるため、「はい」コマンドハックは機能しませんでした。
/* script-mode: don't handle the exception */
if (opt_script_mode || (!isatty (0) && !pretend_input_tty))
return PED_EXCEPTION_UNHANDLED;
失敗する「isatty」テストに注意してください。 'pretend_input_tty'は文書化されていないコマンドラインオプションで、--- pretend-input-ttyを使用してオンにできます。
したがって、スクリプトからpartedを使用する場合、私の答えは次のとおりです。
/sbin/parted -a optimal /dev/loop1 ---pretend-input-tty resizepart 4 Yes 522239s
注 pretend-input-ttyの前にある3つのダッシュ。これは私たちを怖がらせるためだと思います。確かではありません。
このバグはここに記載されています: https://bugs.launchpad.net/ubuntu/+source/parted/+bug/12702
スレッドで述べたように、2つの回避策があります。最も簡単な方法は、コマンドリストに「Yes」を追加することです。
parted --script /dev/sda unit B resizepart 2 1166016512B Yes
このスクリプトは、分割されたバージョンのバリエーションに対して少し脆弱ですが、私にとっては機能し、@ frostschutzによって提案されたパーティションテーブルの再構築が拡張/複数パーティションのサイズ変更によって複雑になる場合に特に役立ちます。
スクリプト
#!/bin/bash
echo "Resizing partition ${2} on ${1} with new end ${3}"
parted "${1}" ---pretend-input-tty <<EOF
resizepart
${2}
${3}
Yes
quit
EOF
echo "Done"
使用例:
Sudo ./resize_partition.sh /dev/loop0 2 15757970s
注:セクターで指定されたパーティションエンドポイントを使用しているため、s
です。
コマンドライン引数だけを使用してparted
で自動化する場合は、-s
を実行します。 man parted
から:
-s, --script
never prompts for user intervention