web-dev-qa-db-ja.com

GNUスクリプトでparted resizepart

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
6
Xion345

resizepartが機能しない場合、rmmkpartを使用して同じことを行う必要がある場合があります。

もちろん、パーティションタイプと開始オフセットを決定するために、最初にパーティションテーブルを解析する必要があります。必要な値がわかっている場合を除きます。結局のところ、166016512Bどこからでも。

partedには--machineオプションを使用すると、簡単に解析できる出力を生成できます。一方、実際に構文解析する例は簡単には見つかりません。 ;)

5
frostschutz

私の場合、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つのダッシュ。これは私たちを怖がらせるためだと思います。確かではありません。

5
Jonah

このバグはここに記載されています: https://bugs.launchpad.net/ubuntu/+source/parted/+bug/12702

スレッドで述べたように、2つの回避策があります。最も簡単な方法は、コマンドリストに「Yes」を追加することです。

parted --script /dev/sda unit B resizepart 2 1166016512B Yes
4
tjdett

このスクリプトは、分割されたバージョンのバリエーションに対して少し脆弱ですが、私にとっては機能し、@ 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です。

0
Benp44

コマンドライン引数だけを使用してpartedで自動化する場合は、-sを実行します。 man partedから:

-s, --script
          never prompts for user intervention
0
goldilocks