bash - ディスクがパーティション化されていないかどうかをテストする

bash - ディスクがパーティション化されていないかどうかをテストする

私は現在、mhddfs を使用して空きディスク領域を集約する DIY ネットワーク ストレージに取り組んでいます。

ここで私が望んでいるのは、たとえばホットスワップ ベイがある場合、パーティション化されていない新しいディスクを挿入すると、bash スクリプトを使用してディスクを自動的にパーティション化し、新しい mhddfs パーティションをマウントすることです。

サーバーの電源をオフにし、新しいディスクを挿入してサーバーの電源を再度オンにした場合も、同じ状況が発生します。

質問は、bash スクリプトを使用してパーティション化されていないディスクを検出するにはどうすればよいかということです。

質問には、誤検出があってはならないということも含まれています。たとえば、暗号化されたディスクが挿入された場合、自動的に再パーティション化およびフォーマットされるべきではありません。この点が質問の主な関心事です。

答え1

チェックとパーティション分割を実行するための 1 つのオプションは、partedコマンドです。システム内のすべてのディスク ブロック デバイスのパーティション情報を「人間が読める」形式で取得するには、次のコマンドを実行します。

/sbin/parted -l

または、「機械可読」形式では、次のように使用します。

/sbin/parted -lm

ディスクに有効なパーティション テーブルがあるかどうかを確認するには、の出力を解析する必要があります。

次に、次のようなものを使用します。

/sbin/parted <device> --script mkpart primary 1 -- -1

ディスク全体を使用して単一のパーティションを作成します。 mkpartサブコマンドの構文は記憶からのものであり、それが正しいことを検証できるディスクを備えたシステムがありません。

答え2

私がバックアップに使用している方法は次のとおりです。

if [ $(/sbin/sfdisk -d ${DEV} 2>&1) == "" ]; then echo "Device not partitioned"; fi

ここで、${DEV} は調査対象のデバイスです (udev スクリプトから実行するのが最適です)。

答え3

Linux カーネルでこれを実行していると想定します。

パッケージから使用fdiskまたは入手:sfdiskutil-linux

fdisk -l /path/to/disk

または:

sfdisk -l /path/to/disk

現在のパーティションテーブルを一覧表示します。

Linux は利用可能なパーティションを検出するので、/dev/diskディレクトリを調べるだけでニーズを満たすことができるかもしれません。

答え4

私は投稿された回答がとても気に入りましたスタックオーバーフローこれは次のことを示唆します:

parted --script

のように:

parted --script /dev/sdb print

関連情報