ファイルシステムのラベルがわかっている場合、パーティションデバイス名とマウントポイントを取得するにはどうすればよいですか?
いくつかの可能性があります:
デバイス名はblkid
で取得できます。
blkid -l -o device -t LABEL="$label" -c /dev/null
blkid
でマウントポイントを取得しようとしましたが、失敗しました。 -s
スイッチを使用すると、ラベルが提供されているときに他のすべてのフィールドを照会できます。
blkid -l -t LABEL="$label" -o value -s LABEL # yields label
blkid -l -t LABEL="$label" -o value -s TYPE # yields partition type
blkid -l -t LABEL="$label" -o value -s UUID # yields UUID
blkid -l -t LABEL="$label" -o value -s MOUNTPOINT # yields nothing
マウントポイントの取得は明らかにサポートされていませんが、-o list
オプションが指定されたときにリストされますが、簡単に解析できる方法ではありません。
blkid -o list -c /dev/null <device>
次の試みはdf -P
を使用することでした。デバイスが変数device
に格納されていると仮定して、これが私が思いついたものです。
export device
mountpoint=$(df -P |
awk --assign dev="$device" \
'{if ($1==dev) \
{for (i=1; i<=NF-5; i++) \
$i=$(i+5); \
NF-=5; \
print \
} \
}')
このコードは機能します。ただし、醜いので、df
の解析が好ましい方法であるとは確信していません。
blkid
はLinuxで美しく動作しますが、SolarisまたはFreeBSDでは使用できません(少なくとも1つはインストールされることを期待できません)。同じことがfindfs
にも当てはまります。
Linux、Solaris、FreeBSDでポータブルな方法でデバイス名を取得するにはどうすればよいですか?
幸い、df -P
は、テストされたすべてのシステムで非常に類似した出力を生成します。問題は、私の醜いawk
スクリプトが移植可能ではないように見えることです(SolarisおよびFreeBSD awk
でSungawk
、awk
でテスト済み)。推奨される方法は何ですか?
idを使用してフラッシュドライブのマウントポイントを取得するにはどうすればよいですか? 問題:/proc/mounts
の解析は移植性がなく、Linuxでも面倒です。 mount
の解析はさらに悪いようです。 Perlは通常利用できません。
ディスクがマウントされている場所を確認するコマンドはありますか? 問題:バグのあるawk
スクリプトで/proc/mounts
を解析します。ソリューションは移植性がありません。
ファイルシステムラベルがポータブルな方法で提供されている場合(POSIXシェルを想定)、デバイス名とマウントポイントを取得したいと思います。ディスクラベルには空白やその他の非ASCII文字が含まれている可能性があり、さらに複雑になっているようです。
Label-To-Device Device-To-Mount-Point
--------------- ---------------------
Linux ✓ ✓ (ugly)
Solaris . .
FreeBSD . .
次の手順に従って実行できます。
blkid_dev_devname(...)
を使用してdevname
を取得しますblkid_new_probe_from_filename(...)
を使用してこのパーティションのprob
を取得しますsetmntent(...)
、getmntent(...)
、およびendmntent(...)
を使用します。ここで、mnt->mnt_fsname
はマウントポイントであるdevname
コピーmnt->mnt_dir
と同じです。 !!struct mntent {
char *mnt_fsname; /* name of mounted file system */
char *mnt_dir; /* file system path prefix */
...
};