获取有关当前已卸载驱动器的信息的最佳方法是什么?


38

首先,情况:我有一台Linux计算机,带有两个eSATA驱动器托架,可以容纳可移动SSD驱动器。我正在尝试编写一个小的GUI应用程序,以使用户更容易安装/卸载/格式化/备份/等他放入这些托架的驱动器。

大部分都可以。但是,一个小问题是,在成功安装驱动器之前,我不知道如何找到有关插入的驱动器上的内容的任何信息。

因此,例如,如果用户插入了无法安装的驱动器(例如,由于未格式化或使用意外的文件系统格式化),则我的所有应用程序都可以说这是“驱动器无法安装”。

这不是很令人满意,因为如果驱动器未格式化,则用户可能会希望对其进行格式化...但是,如果驱动器包含来自无法识别的文件系统的数据,则用户可能会不想对其进行格式化...。至少,我希望能够警告他,这样他将擦除可能有价值的数据。

因此,我的问题是:是否有任何方法可以从驱动器中查询某些基本信息(尤其是文件系统类型),而无需安装该驱动器?还是我只需要尝试用各种已知的文件系统挂载它,直到其中一次挂载尝试成功,如果没有一个尝试,则给出模糊的“小心”信息?

万一重要,我将驱动器安装在驱动器托架中的路径是:

/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

Answers:


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 /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              

无论如何,我建议您看看udevparted源。


12
自那时起,“ vol_id”已重命名为“ blkid”,适用于偶然发现此好答案的任何人。
Dave S.

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

很好的答案!
Sufiyan Ghori

5

另一个有用的命令是blkid-它返回与之类似的信息,vol_id但也可以扫描系统中的所有设备,而不需要传入设备。

要强制blkid扫描所有设备而不是使用缓存的信息,请运行blkid -c /dev/null(您需要对块设备具有读取权限,因此通常需要以超级用户身份运行它)


一位匿名用户想要添加:这一切都很有用,但是'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"手册页也值得一看。
克里斯·S

1

这是IBM的一项建议: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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.