状況:LinuxでPythonを使用して自動ファイルマウントを作成します。システムコールを使用してそれを行うためのPythonの方法はありません(技術的には、bashスクリプトを実行していることを意味します。 Python経由)。
問題:ディスクラベルを取得するだけでは、ディスクをマウントできません。たとえば、ディスクラベル/dev/sda
を取得できますが、マウント可能なのは/dev/sda1
のみで、/dev/sda2
はSWAPパーティションです。
fdisk
出力とparted
出力は、マウントできるディスクを決定するのに実際には役立ちません(つまり、有効な読み取り可能なファイルシステムがあります)
質問:Linux/Bashコマンドを使用して、マウントできるディスクを見つけるにはどうすればよいですか(最終結果を得るために、10本を超えるgrep
パイプをチェーンしてもかまいません)。
lsblk
とblkid
の両方を使用して、パーティションの内容(スワップ、既知のファイルシステム、生データなど)を見つけることができます。どちらにも出力形式を指定するためのさまざまなオプションがあるため、必要な情報(ファイルシステムタイプ、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)