Jaki jest najlepszy sposób na uzyskanie informacji o aktualnie odmontowanych dyskach?

38

Po pierwsze sytuacja: mam komputer z systemem Linux i dwie wnęki na dyski eSATA, które akceptują wymienne dyski SSD. Próbuję napisać małą aplikację GUI, która ułatwia użytkownikowi montowanie / odmontowywanie / formatowanie / tworzenie kopii zapasowych / itp. Dysków, które wkłada do tych wnęk.

To wszystko w większości działa. Mały problem polega jednak na tym, że nie wiem, jak znaleźć informacje o tym, co znajduje się na włożonych dyskach, aż do pomyślnego zamontowania dysków.

Na przykład, jeśli użytkownik wstawi dysk, którego nie mogę zamontować (np. Ponieważ jest niesformatowany lub sformatowany przy użyciu nieoczekiwanego systemu plików), cała moja aplikacja może o tym powiedzieć: „Dysk nie został zamontowany”.

Nie jest to zbyt zadowalające, ponieważ jeśli dysk jest niesformatowany, użytkownik prawdopodobnie będzie chciał go sformatować ... ale jeśli dysk zawiera dane z nierozpoznanego systemu plików, prawdopodobnie NIE będzie chciał go sformatować ... lub przynajmniej chcę go ostrzec, że w ten sposób usunie potencjalnie cenne dane.

Więc moje pytanie brzmi: czy istnieje metoda zapytania o niektóre podstawowe informacje (zwłaszcza typu systemu plików) z dysku, który nie wymaga, aby dysk był już zamontowany? Czy też muszę po prostu próbować zamontować go przy użyciu różnych znanych systemów plików, dopóki jedna z tych prób nie powiedzie się, i dać mglisty komunikat „uważaj”, jeśli żaden z nich nie powiedzie się?

W przypadku, gdy ma to znaczenie, ścieżki, których używam do montowania dysków we wnękach na dyski, to:

/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
Jeremy Friesner
źródło

Odpowiedzi:

55

Jeśli dyski są odmontowane, możesz zrobić kilka rzeczy.

Możesz użyć polecenia takiego jak fdisk -llub, sfdisk -laby wyświetlić listę partycji. Tylko typ partycji może dostarczyć użytecznych informacji, jeśli partycje zostały skonfigurowane poprawnie. 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

Jeśli jest obecny w twoim systemie, możesz użyć polecenia vol_idprzeciwko partycji, aby zwrócić przydatne informacje (część pakietu udev w Debianie). Zazwyczaj powie ci, jakiego systemu plików faktycznie używasz.

# 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=

Polecenie lshw -class diskpoda ci kilka szczegółów na temat typu napędu. Możesz użyć tego, jeśli jesteś ciekawy rzeczywistego numeru seryjnego napędu.

# 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

Jeśli jesteś pewien, że istnieje na nim określony system plików, taki jak ext2 / 3, możesz użyć narzędzia tune2fs specyficznego dla systemu plików , aby sprawdzić więcej szczegółów.

# 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

Kolejnym przydatnym narzędziem jest 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  

Jeśli masz zainstalowany program parted, możesz uruchomić takie polecenie

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              

W każdym razie, w przeszłości, sugeruję przyjrzeć się udev lub podzielonemu źródłu.

Zoredache
źródło
12
Nazwa „vol_id” została odtąd przemianowana na „blkid”, dla każdego, kto natknie się na tę wspaniałą odpowiedź.
Dave S.
lsblk -i -o kname,mountpoint,fstype,size,maj:min,name,state,rm,rota,ro,type,label,model,serial
sjas
wspaniała odpowiedź !!
Sufiyan Ghori,
5

Innym przydatnym poleceniem jest blkid- zwraca podobne informacje, vol_idale może również skanować wszystkie urządzenia w systemie, zamiast wymagać przekazania urządzenia.

Aby wymusić blkidskanowanie wszystkich urządzeń zamiast korzystania z pamięci podręcznej, uruchom blkid -c /dev/null(potrzebujesz uprawnień do odczytu na urządzeniach blokowych, więc zwykle musisz uruchomić je jako root)

James
źródło
Anonimowy użytkownik chciał dodać: Jest to przydatne, ale „vol-id” zostało teraz całkowicie zastąpione przez „blkid”; ani SuSE, ani Debian nie mają już „vol-id” w swoich repozytoriach. Uruchom whereis blockidz linii poleceń (lub man blockid), przekonasz się, czy jest załadowany. Uruchom jako root: blkid /dev/sdb1daje (na przykład): /dev/sdb1: SEC_TYPE="msdos" LABEL="DR-05" UUID="8031-5963" TYPE="vfat"Strona podręcznika jest również warta obejrzenia.
Chris S
1

Oto jedna sugestia IBM: SCSI - Hot add, remove, rescan of SCSI devices: Rescan of SCSI Device . Spowoduje to ponowne przeskanowanie tego adresu SCSI dla nowych urządzeń, a następnie będziesz mógł odczytać informacje w / var / log / messages. Niektóre inne narzędzia dyskowe będą również działać bez montowania napędu.

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

Wczoraj próbowałem czegoś nieco innego i zadziałało (system RHEL4):

cd /sys/bus/scsi/devices
echo > 0\:0\:0\:0/rescan
Stefan Lasiewski
źródło
0

Prosty przegląd wszystkich partycji znalezionych przez jądro daje

cat /proc/partitions
Frank Breitling
źródło