私は現在、mhddfsを使用して空きディスク容量を集約するDIYネットワークストレージに取り組んでいます。
たとえば、ホットスワップベイが与えられた場合、新しいパーティション化されていないディスクを挿入するときに、bashスクリプトを使用してディスクを自動的にパーティション分割し、新しいmhddfsパーティションをマウントしたいと思います。
サーバーの電源がオフになり、新しいディスクが挿入され、サーバーの電源が再びオンになった場合にも、同じ状況が発生します。
したがって、問題は、bashスクリプトを使用してパーティション化されていないディスクを検出するにはどうすればよいですか?
質問には、誤検出があってはならないことも含まれています。例えば暗号化されたディスクが挿入された場合、それを自動的に再パーティション化してフォーマットするべきではありません-この点が問題の主な関心事です。
チェックとパーティショニングを実行する1つのオプションは、parted
コマンドです。システム内のすべてのディスクブロックデバイスのパーティション情報を「人間が読める」形式で取得するには、次の手順に従います。
/sbin/parted -l
または、「機械可読」形式で、以下を使用します。
/sbin/parted -lm
ディスクに有効なパーティションテーブルがあるかどうかを判断するには、の出力を解析する必要があります。
次に、次のようなものを使用します。
/sbin/parted <device> --script mkpart primary 1 -- -1
ディスク全体を使用して単一のパーティションを作成します。 mkpartサブコマンドの構文はメモリからのものであり、正しいことを確認するために使用可能なディスクを備えたシステムがありません
これが私がバックアップに使用している方法です。
if [ $(/sbin/sfdisk -d ${DEV} 2>&1) == "" ]; then echo "Device not partitioned"; fi
ここで、$ {DEV}は問い合わせているデバイスです(udevスクリプトから実行するのが最適です)。
gpart
コマンドを確認してください(PCタイプのハードディスクパーティションを推測し、rootが必要です)。もう1つの質問は、新しいディスクが挿入されたときに、スクリプトはどのように開始されるのかということです。
Linuxカーネルでこれを行っていると思います。
util-linux
パッケージのfdisk
またはsfdisk
を使用します。
fdisk -l /path/to/disk
または:
sfdisk -l /path/to/disk
現在のパーティションテーブルを一覧表示します。
Linuxは使用可能なパーティションを検出するため、/dev/disk
ディレクトリを調べるだけで十分な場合があります。