質問: linux:システムで使用可能なすべてのディスクのすべてのuuidを表示するにはどうすればよいですか? 俺の /etc/fstabには次が含まれます:# / was on /dev/sda1 during installation uuid=77d8da74-a690-481a-86d5-9beab5a8e842 / ext4 errors=remount-ro 0 1 このシステムには他にもいくつかのディスクがあり、すべてのディスクが正しい場所にマウントされているわけではありません(たとえば、/ dev/sda1と/ dev/sdb1が逆になっている場合があります)。システム上のすべてのディスクのuuidを確認するにはどうすればよいですか?このシステムの3番目のディスクのuuidを確認できますか?
回答: 私はあなたと同じ問題を抱えています:再起動後にカーネルによって/dev/sd**の名前を変更します:もちろん、/etc/fstabでの自動マウントはすべてlabelまたはuuidで参照されるため、基本的には問題ありません。上記のすべてのコマンドblkidまたはlsblkは、この種の情報を提供します。しかし、私の場合と同様に、問題は、パーティションをrawモードで使用している場合、現在ブートされているシステムの視点で発生します。たとえば、パーティションはrawデバイスとして使用され、virtualboxの仮想ディスクを作成します(したがってこのパーティションへの参照は次のようなものです:/dev/sdf3)またはパーティションはrawデバイスとして使用され、iscsiのlunを作成します(したがって、このパーティションへの参照は次のようなものです:/dev/sdc6)したがって、たとえばrc.localなどの起動時に、専用のrawパーティションの/dev/sdxxデバイスを信頼できる方法で見つけて、いくつかのファイルを調整する必要があります。例1この生ディスクのvirtualboxディスク* .vmkの説明。\# extent description rw 488397167 flat "/dev/sdxx" 0 virtualboxサービスを再起動します例2tgtd構成では、ビルド時にターゲット:target0が/dev/sdd6に関連付けられていました。再起動後、同じパーティションの名前が/deb/sdc6に変更されます。これは、リムーバブルディスク、usbまたはesataで発生します!では、新しいデバイスを自動的に見つける方法は?もう一度/etc/rc.d/rc.localにしたがって、この場合、新しいデバイス名を見つけるための信頼できる方法が必要です。 gptパーティションは、gptテーブルに記述された任意のgptパーティションに固有のguidを提供します。gdiskは、リストモードではこの情報を提供しませんが、iコマンドを使用したインタラクティブモードでのみ提供します。幸い、blkidがそれを行います!したがって、パーティション作成時に通知されたguidに関連付けられているデバイス/dev/sdxxであるすべてのディスクを調べるには、シェルスクリプトを作成する必要があります。search_device_by_partuuid.shのようなもの:\#!/bin/bash part_uuid=$1 if [ "$part_uuid" = "" ] then echo "syntax: $0 <a valid partition uuid>" exit 3 fi lsblk | grep '^sd' | awk '{print $1}' | while read disk_device do info=`blkid /dev/${disk_device}* | grep "partuuid=\"$part_uuid\"" ` if [ "$info" != "" ] then echo info : "$info" blk_device=`echo "$info" | awk '{print $1}'` echo $blk_device > /dev/shm/blkdevice echo -n "blk_device : " ; cat /dev/shm/blkdevice fi done 次に、rc.localスクリプトで/dev/shm/blkdeviceを使用します。