スクリプトのGNU分割サイズ変更部分

スクリプトのGNU分割サイズ変更部分

yesGNU partedがユーザー入力を待たないように、このコマンドを使用したいと思います。

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

答え1

私の場合は、ttyless SSHセッションでParted 3.2を使用しています。分離されたコードには次のテストがあるため、「Yes」コマンドハッキングは機能しません。

    /* 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

それでも問題が解決しない場合は、Yes最後に移動してみてください。

/sbin/parted -a optimal /dev/loop1 ---pretend-input-tty resizepart 4 522239s Yes

ノートttyの前にダッシュ3つを入力するふりをします。私はそれが私たちを驚かせるべきだと思います。しかし、わかりません。

答え2

それでも効果がない場合は、それに依存して同じ目標を達成する必要がresizepartあるかもしれません。rmmkpart

もちろん、これを行うには、パーティションの種類と開始オフセットを決定するために、まずパーティションテーブルを解析する必要があります。必要な値を既に知っていない限り。結局、あなたも166016512Bどこかでそれを持って来る必要があります。

partedオプションで--machine解析しやすい出力を生成します。一方、これを実際に解析した事例は見つけるのが容易ではない。 ;)

答え3

GNU partedを使用したサイズ変更は、次のコマンドを使用して実行できます。

echo yes | parted /dev/sda ---pretend-input-tty resizepart 2 100GB

答え4

このスクリプトはバージョン変更を分割するのに少し脆弱ですが、私にとってはうまく機能し、@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

関連情報