Який найкращий спосіб отримати інформацію про наразі відключені накопичувачі?


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

Відповіді:


55

Якщо диски відключені, ви можете зробити кілька речей.

Ви можете використовувати команду на зразок fdisk -lабо sfdisk -lперелічити розділи. Просто тип розділу може дати вам корисну інформацію, якщо розділи, де налаштування правильні.y

# 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проти розділу, щоб повернути деякі корисні деталі (частина пакету udev на Debian). Це загалом скаже вам, яка файлова система насправді використовується.

# 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              

Як би то не було, я пропоную вам поглянути на udev або розірване джерело.


12
"vol_id" з тих пір перейменований на "blkid", тому що хтось, хто трапляється натрапив на цю чудову відповідь.
Дейв С.

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

чудова відповідь !!
Sufiyan Ghori

5

Ще одна корисна команда blkid- вона повертає аналогічну інформаціюvol_id але може також сканувати всі пристрої в системі, а не вимагати передачі пристрою.

Щоб змусити blkidсканувати всі пристрої, а не використовувати кешовану інформацію, запустіть blkid -c /dev/null(потрібен дозвіл на читання на блокових пристроях, тому зазвичай потрібно запустити його як root)


Анонімний користувач хотів додати: Це все корисно, але "vol-id" тепер повністю замінено на "blkid"; ні SuSE, ні Debian вже не мають "vol-id" у своїх сховищах. Запустившись whereis blockidз командного рядка (або man blockid), ви побачите, чи завантажений він. Запустити як корінь: blkid /dev/sdb1дає (наприклад): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"Сторінку man також варто переглянути.
Кріс 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.