Linuxでそのファイルからディスクのシリアル番号を取得するには?

Linuxでそのファイルからディスクのシリアル番号を取得するには?

Linuxディスクでは、基本情報を取得するために、hdparmまたはなどのコマンドを使用できることがわかります。smartctlしかし、これらのコマンドを実装するには、Linuxでディスク上の対応するファイルを読み取ってすべてを実装すると思います。たとえば、デバイスのサイズを取得するには/dev/sdacat /sys/block/sda/size、代わりにorなどのコマンドを使用できます。もしそうなら、問題はディスクに対応するファイルを直接読み取ってディスクのシリアル番号を見つける方法です。hdparmsmartctl

ベストアンサー1

私はそれを試しています。 ioctlを介してシリアル番号を取得します。以下はstraceのいくつかの出力です。

open("/dev/sda", O_RDONLY|O_NONBLOCK)   = 3
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
ioctl(3, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[6]=[12, 00, 00, 00, 24, 00], mx_sb_len=32, iovec_count=0, dxfer_len=36, timeout=20000, flags=0, data[36]=["\0\0\5\2[\0\0\0ATA     WDC WD5000LPVX-0"...], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=0, info=0}) = 0
ioctl(3, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[16]=[85, 08, 0e, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00, ec, 00], mx_sb_len=32, iovec_count=0, dxfer_len=512, timeout=20000, flags=0, data[512]=["zB\377?7\310\20\0\0\0\0\0?\0\0\0\0\0\0\0    W -DXW11"...], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=0, info=0}) = 0
ioctl(3, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[16]=[85, 08, 0e, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00, ec, 00], mx_sb_len=32, iovec_count=0, dxfer_len=512, timeout=20000, flags=0, data[512]=["zB\377?7\310\20\0\0\0\0\0?\0\0\0\0\0\0\0    W -DXW11"...], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=0, info=0}) = 0

おすすめ記事