ファイルシステムのラベルがわかっている場合、パーティションデバイス名とマウントポイントを取得する方法は?
いくつかの可能性があります:
Linux
デバイス名のファイルシステムラベル
デバイス名は次のようにして取得できます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では使用できません(少なくともインストールされるとは期待できません)。同じだ
findfs
。
Linux、Solaris、FreeBSDでデバイス名を移植可能にする方法は?
マウントポイントのデバイス名
幸いなことに、df -P
これはテストされたすべてのシステムで非常によく似た結果を生み出します。問題は、私の醜いスクリプトが移植性がないようです(Sunをawk
使用してSolarisとFreeBSDでawk
テスト)。好ましい方法は何ですか?gawk
awk
関連質問
uuidを使ってフラッシュドライブのマウントポイントを取得するには?
問題:/proc/mounts
Linuxでも解析は移植性がなく面倒です。解析がmount
悪いようです。 Perlは通常使用できません。
ディスクマウントの場所を確認する命令がありますか?
問題:解析に/proc/mounts
バグがあるスクリプトを使用してください。awk
これらのソリューションは移植性がありません。
一般化する
ファイルシステムラベルが移植可能な方法で提供されている場合(POSIXシェルを想定)、デバイス名とマウントポイントを取得したいと思います。ディスクラベルには、スペースやその他の非ASCII文字を含めることができ、これは問題をより複雑にします。
Label-To-Device Device-To-Mount-Point
--------------- ---------------------
Linux ✓ ✓ (ugly)
Solaris . .
FreeBSD . .
答え1
次の手順を実行できます。
devname
使い始めるblkid_dev_devname(...)
- 以下を使用して
prob
このパーティションをインポートします。blkid_new_probe_from_filename(...)
setmntent(...)
、、getmntent(...)
&を使ってマウントポイントをコピーendmntent(...)
してください!mnt->mnt_fsname
devname
mnt->mnt_dir
詳細については、次の参考資料を参照してください。
- http://linux.die.net/man/3/getmntent
- https://www.kernel.org/pub/linux/utils/util-linux/v2.21/libblkid-docs/api-index-full.html
コンテンツデータ構造
struct mntent {
char *mnt_fsname; /* name of mounted file system */
char *mnt_dir; /* file system path prefix */
...
};