私たちはないディスクだけを印刷したいと思います。ファイルシステムコマンドライン経由
次の例では、sde
ディスクにファイルシステムがないことがわかります。
lsblk -o NAME,FSTYPE
NAME FSTYPE
sda
├─sda1 xfs
└─sda2 LVM2_member
├─vg-LV_root xfs
├─vg-LV_swap swap
├─vg-LV_var xfs
└─vg-LV_docker xfs
sdb ext4
sdc ext4
sdd ext4
sde
だから私たちはFSなしでディスクをキャプチャするために次のコマンドを試みます。
lsblk -o NAME,FSTYPE | awk '$2 == "" { print $0 }'
私達は得た
sda
sde
sda
上記の印刷ディスクからわかるように、sda
オペレーティングシステムのディスクなので、コマンドラインから正しい出力が提供されません。
正しい出力は次のようにする必要があります。
sde
正しい出力を提供するための提案や他の方法はありますか?
lsblk -oNAME,FSTYPE,FSTYPE --noheadings --nodeps
sda
sdb ext4 ext4
sdc ext4 ext4
sdd ext4 ext4
sde
ベストアンサー1
メソッドでは、lsblkにfdisk(およびいくつかの簡単なヘルパーツール)を追加することをお勧めします。次のシェルスクリプトは私のテストケースで動作します。
#!/bin/bash
for i in $(lsblk -dno name|grep -v sr)
do
LANG=C
sudo fdisk -lu "/dev/$i" |
tr '\n' ' ' |
grep 'Disk ' |
grep -v 'Disklabel type:' |
grep -o "/dev/$i"
done
これはクリーンドライブを識別します(ディスクラベルエイリアスパーティションテーブルなし)。
パーティションテーブルとパーティションはありますが、パーティション(またはスワップスペース)にファイルシステムがないドライブを表示するには、lsblk(およびいくつかの簡単なヘルパーツール)のみを使用する次のシェルスクリプトを試してください。
#!/bin/bash
for i in $(lsblk -dno name|grep -v sr)
do
LANG=C
echo -n "/dev/$i "
lsblk -lno fstype "/dev/$i" | tr '\n' ' '
echo ""
done | sed 's/ *$//' | grep -v '\ [a-z]*'
編集する:
CD/DVDドライブを見たい場合は、|grep -v sr
「for-line」から削除してください。これは2番目のオプションではうまく機能します(ただし、fdiskは "fdisk:can open /dev/sr0:media notfound"を介してdoループから出ることができるため、最初のオプションではうまくいきません)。