現在マウントされていないドライブに関する情報を取得する最良の方法は何ですか?


38

まず、状況:リムーバブルSSDドライブを受け入れる2つのeSATAドライブベイを備えたLinuxコンピューターを持っています。ユーザーがこれらのベイに挿入したドライブのマウント/アンマウント/フォーマット/バックアップなどを簡単に行えるようにする小さなGUIアプリケーションを作成しようとしています。

ほとんどすべて機能します。ただし、小さな問題の1つは、ドライブが正常にマウントされるまで、挿入されたドライブの内容に関する情報を見つける方法がわからないことです。

したがって、たとえば、ユーザーがマウントできないドライブを挿入した場合(たとえば、フォーマットされていないか、予期しないファイルシステムでフォーマットされているため)、アプリはすべて「Drive failed to mount」と言うことができます。

これはあまり満足のいくものではありません。ドライブがフォーマットされていない場合、ユーザーはおそらくフォーマットしたいでしょう...しかし、ドライブに認識されないファイルシステムからのデータが含まれている場合、ユーザーはおそらくフォーマットしたくないでしょう...少なくとも、そうすることで、彼は潜在的に価値のあるデータを消去することになると彼に警告したい。

だから私の質問は:ドライブが既にマウントされていることを必要としないドライブからいくつかの基本的な情報(特にファイルシステムタイプ)を照会する方法はありますか?または、マウント試行の1つが成功するまで、さまざまな既知のファイルシステムでマウントを試行し、どれも実行しない場合はあいまいな「注意」メッセージを表示する必要がありますか?

重要な場合、ドライブをドライブベイにマウントするために使用するパスは次のとおりです。

/dev/disk/by-path/pci-0000:00:1f.2-scsi-2:0:0:0
/dev/disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0

回答:


55

ドライブがマウント解除されている場合、いくつかのことができます。

fdisk -lまたはのようなコマンドを使用してsfdisk -l、パーティションを一覧表示できます。パーティションのタイプだけで、セットアップが正しいパーティションの場合に役立つ情報が得られます。

# sfdisk -l

Disk /dev/sda: 4177 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1   *      0+     30      31-    248976   83  Linux
/dev/sda2         31    4176    4146   33302745   8e  Linux LVM
/dev/sda3          0       -       0          0    0  Empty
/dev/sda4          0       -       0          0    0  Empty

システムに存在する場合はvol_id、パーティションに対してコマンドを使用して、いくつかの有用な詳細(Debianのudevパッケージの一部)を返すことができます。これにより、実際にどのファイルシステムが実際に使用されているかがわかります。

# vol_id /dev/sda1

ID_FS_USAGE=filesystem
ID_FS_TYPE=ext3
ID_FS_VERSION=1.0
ID_FS_UUID=32c44d53-9025-4d10-8f36-75c166547bd5
ID_FS_UUID_ENC=32c44d53-9025-4d10-8f36-75c166547bd5
ID_FS_LABEL=
ID_FS_LABEL_ENC=
ID_FS_LABEL_SAFE=

このコマンドlshw -class diskは、ドライブのタイプに関する詳細を提供します。ドライブの実際のシリアル番号に興味がある場合は、これを使用できます。

# lshw -class disk

  *-disk
       description: ATA Disk
       product: VBOX HARDDISK
       physical id: 0.0.0
       bus info: scsi@0:0.0.0
       logical name: /dev/sda
       version: 1.0
       serial: VB169e93fb-d1e0fd97
       size: 32GiB (34GB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 signature=000d39f8

ext2 / 3のような特定のファイルシステムが確実に存在する場合は、ファイルシステム固有のtune2fsツールを使用して詳細を調べることができます。

# tune2fs -l /dev/sda1

tune2fs 1.41.3 (12-Oct-2008)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          8cbdf102-05c7-4ae4-96ea-681cf9b11914
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      filetype sparse_super
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              124496
Block count:              248976
Reserved block count:     12448
Free blocks:              212961
Free inodes:              124467
First block:              1
Block size:               1024
Fragment size:            1024
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         4016
Inode blocks per group:   502
Last mount time:          Thu Oct  7 15:34:42 2010
Last write time:          Thu Oct  7 15:34:42 2010
Mount count:              4
Maximum mount count:      30
Last checked:             Wed Sep 15 09:29:03 2010
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           128

別の便利なツールはlsblkです。

# lsblk 

NAME                MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                   8:0    0    30G  0 disk 
└─sda1                8:1    0    30G  0 part 
  ├─vg1-root (dm-0) 254:0    0  23.3G  0 lvm  /
  └─vg1-swap (dm-1) 254:1    0   1.9G  0 lvm  [SWAP]
sr0                  11:0    1  1024M  0 rom  

partedがインストールされている場合、次のようなコマンドを実行できます

parted /dev/sda print all

Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 34.4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  255MB   255MB   primary  ext2         boot 
 2      255MB   34.4GB  34.1GB  primary               lvm  

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/vg1root: 32.6GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  32.6GB  32.6GB  ext3              

とにかく過去には、udevまたはparted sourceをご覧になることをお勧めします。


12
この素晴らしい答えに偶然出くわした人のために、「vol_id」は「blkid」に改名されました。
デイブS.

lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial
sjas

素晴らしい答え!!
スフィヤンゴリ

5

別の便利なコマンドは、blkid同様の情報を返しますvol_idが、デバイスを渡す必要なく、システム内のすべてのデバイスをスキャンすることもできます。

blkidキャッシュされた情報を使用する代わりに、すべてのデバイスを強制的にスキャンするには、実行しますblkid -c /dev/null(通常、rootとして実行する必要があるため、ブロックデバイスの読み取り権限が必要です)


追加したい匿名ユーザー:これはすべて便利ですが、「vol-id」は完全に「blkid」に置き換えられました。SuSEもDebianも、リポジトリに「vol-id」がありません。whereis blockidコマンドライン(またはman blockid)から実行すると、ロードされているかどうかがわかります。rootとして実行:blkid /dev/sdb1与える(たとえば):/dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"manページも一見の価値があります。
クリスS

1

IBMからの1つの提案:SCSI-SCSIデバイスのホットアド、削除、再スキャン:SCSIデバイスの再スキャン。これにより、新しいデバイスのSCSIアドレスが再スキャンされ、/ var / log / messagesの情報を読み取ることができます。ドライブをマウントしなくても、他のディスクツールも機能します。

echo 1 > /sys/bus/scsi/drivers/sd/<SCSI-ID>/block/device/rescan

私は実際に昨日わずかに異なるものを試しましたが、うまくいきました(RHEL4システム):

cd /sys/bus/scsi/devices
echo > 0\:0\:0\:0/rescan

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.