web-dev-qa-db-ja.com

Bashスクリプト:パーティションをマウントできるかどうかを確認するにはどうすればよいですか?

状況:LinuxでPythonを使用して自動ファイルマウントを作成します。システムコールを使用してそれを行うためのPythonの方法はありません(技術的には、bashスクリプトを実行していることを意味します。 Python経由)。

問題:ディスクラベルを取得するだけでは、ディスクをマウントできません。たとえば、ディスクラベル/dev/sdaを取得できますが、マウント可能なのは/dev/sda1のみで、/dev/sda2はSWAPパーティションです。

fdisk出力とparted出力は、マウントできるディスクを決定するのに実際には役立ちません(つまり、有効な読み取り可能なファイルシステムがあります)

質問:Linux/Bashコマンドを使用して、マウントできるディスクを見つけるにはどうすればよいですか(最終結果を得るために、10本を超えるgrepパイプをチェーンしてもかまいません)。

1
Timothy Wong

lsblkblkidの両方を使用して、パーティションの内容(スワップ、既知のファイルシステム、生データなど)を見つけることができます。どちらにも出力形式を指定するためのさまざまなオプションがあるため、必要な情報(ファイルシステムタイプ、fsラベル、uuidなど)だけを抽出できます。

IMO blkidはスクリプト操作に適したツールであり、私の経験では、検査対象のブロックデバイスの種類に関係なく、既存のパーティションが何に使用されているかを検出するのに優れています(例:lsblkはZFSzvolをどうするかわかりません。blkidは他のブロックデバイスと同じように扱います。これはまさにZVOLであるため、正確に行う必要があります)。 lsblkはスクリプトで使用できますが、IMOは、きれいに印刷された出力を使用したインタラクティブな使用を重視しています。

例えば私のシステムの1つで:

# blkid /dev/sda*
/dev/sda: PTUUID="3a1e16ae" PTTYPE="dos"
/dev/sda1: UUID="08799b67-8ed7-4cee-aea1-0f9e7bd1fc04" TYPE="ext4" PARTUUID="3a1e16ae-01"
/dev/sda2: UUID="db8bda5f-4f18-4abb-a151-08494e398047" TYPE="swap" PARTUUID="3a1e16ae-02"
/dev/sda3: UUID="fc967791-b9cf-4145-9047-8a8b223ac4bb" TYPE="xfs" PARTUUID="3a1e16ae-03"

または、/ dev/sda1のファイルシステムタイプだけが必要な場合:

# blkid -o value --match-tag TYPE /dev/sda1
ext4

詳細については、blkidのマニュアルページを参照してください。

ところで、file -sも使用できますが、出力の解析が難しくなります。例えば.

# file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=08799b67-8ed7-4cee-aea1-0f9e7bd1fc04 (needs journal recovery) (extents) (large files) (huge files)
4
cas