ファイルシステムを持たないすべてのディスク(mkfs
が実行されていないすべてのディスク)をキャプチャしたい
私は以下を試しましたが、それでもOS(sda)を提供します。
ファイルシステムのないすべてのディスクをキャプチャするためのlsblk
または他のコマンドを使用した最良のアプローチは何ですか?
lsblk -f | egrep -v "xfs|ext3|ext4"
NAME FSTYPE LABEL UUID
MOUNTPOINT
fd0
sda
└─sda2 LVM2_member v0593a-KiKU-9emb-STbx-ByMz-S95k-jChr0m
├─vg00-lv_swap swap 1beb675f-0b4c-4225-8455-e876cafc5756
[SWAP]
sdg
sdh
sdi
sdj
sdk
sr0
lsblk -o NAME,FSTYPE -dsn
これにより、それ自体がパーティションのホルダーではない(パーティションテーブルがない)ブロックデバイスのリストが出力されます。検出されたファイルシステムタイプは2番目の列にあります。空白の場合、認識されたファイルシステムはありません。
したがって、1つのコマンドで必要な出力を取得するには
lsblk -o NAME,FSTYPE -dsn | awk '$2 == "" {print $1}'
次のワンライナーは機能しているようです。 TYPE、PTTYPE、LABEL、またはPARTLABELを持つものを除くすべてのブロックデバイス名を出力します。ラベルの付いたものがすでに使用されている可能性が高いという理由で、最後の2つ。
これは、現時点で既知のファイルシステムタイプのリストを除外するためにgrep -v
を使用するよりもはるかに優れたアプローチのように思われます。
blkid | awk -F': ' '!/ ((PT)?TYPE|(PART)?LABEL)="[^"]+"/ {print $1}'
注:これによって生成されるブロックデバイスのリストは[〜#〜] not [〜#〜]使用されないことが保証されていますが、一般的なものはありません。使用中のブロックデバイスが持っている使用済みマーカー。それらはおそらく使用されていませんが、問題の調査にかなり多くの時間を費やすことなく、それがあらゆる種類の保証されたリストであることを示唆することすら非常に消極的です。
Linuxボックス上のZFSの1つで、次の出力が生成されます。
# blkid | awk -F': ' '!/ ((PT)?TYPE|(PART)?LABEL)="[^"]*"/ {print $1}'
/dev/sdb9
これはそのシステムにとって正しいことです。/dev/sdb9 [〜#〜] is [〜#〜]フォーマットされていない未使用のパーティション。これは、シングルディスクZFSプールで使用されるディスクの最後にある8MBのパーティションです(これはテスト用のホームマシンであり、他の目的でミラードライブが必要でしたが、まだ交換できていません)。
ところで、blkid
はlsblk
よりも実行にかなり時間がかかります。それはlotそれが見ているブロックデバイスの種類を特定しようとするより多くの作業を行います。
これはおそらく、数百のドライブ/ lvmメンバー/ zvolおよびその他のブロックデバイスを備えたサーバーでのみ顕著です。
たとえば、私の中規模サーバーの1つ(さまざまな種類の362ブロックデバイスを使用)では、blkid
の実行に約2分かかりますが、lsblk
の実行には約0.09秒かかります。 39ブロックデバイスしかない別のはるかに小さいシステム(上記のホームテストボックス)では、blkid
は0.16秒かかり、lsblk
は0.01秒かかります。
これを繰り返し実行する必要があり、実行時間が長すぎる場合は、いつでもblkdid
の出力をtmpfileに短時間キャッシュできます。例えばキャッシュが存在しないか、たとえば30分より古い場合は、キャッシュファイル(blkid > /path/to/blkid.cache
)を生成し、それをawk
などへの入力として使用します。
私の意見では、最良のオプションはFDISKです。構文:
fdisk -l | grep -i ^disk