
私が現在使用しているディストリビューション、Arch Linux ARM では、Linux は初期 RAM ディスクなしで起動されます。つまり、カーネルがルート ファイルシステムのマウント作業をすべて行います。このシステムは SD カードにインストールされ、その上に、そのファイルシステムのデバイス ノードを決定する必要があるスクリプトがあります。このデバイス ノードは、デバイスの起動方法 (すでに実行中の別のデバイスに接続するなど) に応じて変わることがあります。
マウントポイントは で確認できますdf -k --output=target ${0} | sed "1d"
。ソースデバイスを特定するには を実行しますdf -k --output=source ${0} | sed "1d"
。Arch Linux を起動した場合、最後のコマンドの結果は になります/dev/root
。存在しない確かに、一部のシステムではudevは実際のルートデバイスへのシンボリックリンクを作成します/dev/root
が、私のシステムではそうしません。できたの内容を確認します/proc/cmdline
が、これはカーネルの稼働時間中は同じままなので、信頼性が低いことを意味します。
を取得したら/dev/root
、それが表す実際の基礎ブロック デバイスをどのように判断すればよいでしょうか?
答え1
答え2
コマンドmount
を実行すると次のように表示されます:
mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p'
答え3
私は見つけたこのブログ投稿Linux でルート デバイスとプライマリ ディスクを見つけるのに非常に役立ちます。
lsblk
CentOS/RHELで提供されているユーティリティをインストールする必要がありますutil-linux
。たとえば、次のようなバリアントにより、ルート デバイスのディスク名が提供されます。
lsblk -oMOUNTPOINT,PKNAME -rn | awk '$1 ~ /^\/$/ { print $2 }'
sda3
findmnt
同じパッケージから、実際の基礎となるルートデバイス名が提供されます。
findmnt -oTARGET,SOURCE -rn /
/ /dev/mapper/vg01-lv_root
両方のユーティリティのフラグは、シェル-P
に適した形式で同じ情報を提供します。eval
findmnt -oTARGET,SOURCE -Pn /
TARGET="/" SOURCE="/dev/mapper/vg01-lv_root"
lsblk -oMOUNTPOINT,PKNAME -Pn | grep 'MOUNTPOINT="/"'
MOUNTPOINT="/" PKNAME="sda3"
答え4
stat /
デバイスのメジャー/マイナー番号を使用して検査したり、rdev
コマンドを使用してこれを自動的に解釈したりすることができます。