Bir Linux makinesine bağlı tüm depolama cihazlarını bulun [kapalı]


109

Takılı olsun veya olmasın , belirli bir makineye takılı tüm yazılabilir depolama aygıtlarını bulmam gerekiyor .

Bunu yapmanın saçma yolu, yazılabilir bir cihaza ( ) karşılık gelen her girişi denemek olacaktır ....../devhd* and sd*

Daha iyi bir çözüm var mı yoksa buna bağlı kalmalı mıyım?


Çekirdeği her türden bağlı aygıtlar hakkında sorgulamanın önerilen yolu olan libsysfs kullanın .
David Schmitt

Onlardan belki monte edildiğinden bahsettiğine göre, sanırım sadece disklerin değil, bölümlerin bir listesini istiyorsun?
Mark Baker

bölümler de iyi, evet :) .. bölümleri bilirsem, hangi fiziksel aygıtların mevcut olduğunu da bileceğim
warren

2
beri Unix & Linux şu anda hazır, bu söz konusu göç edilmelidir
warren

3
@warren - oh hayır. Yine de kapatılmaları gerekir. Gönderinin sahibi olarak bunun taşınmasını istediğinizde, moderatörün dikkatini çekmek için onu işaretlemelisiniz. Hareket ettirmek istemen gerçeği biraz ağırlık taşıyacaktır.
ChrisF

Yanıtlar:


79

/proc/partitionssistemin tanıdığı tüm blok cihazlarını ve bölümleri listeleyecektir. Daha sonra kullanmayı deneyebilirsinizfile -s <device> , varsa, bölüm üzerinde ne tür bir dosya sisteminin mevcut olduğunu belirlemek için .


4
Bu, örneğin CD / DVD sürücülerini ihmal ediyor (genellikle yazılabilir olmadıklarını biliyorum)
pixelbeat

Bir kabuktan yapabilecekleriniz konusunda bir tür sınır vardır. Daha yüksek puan alan diğer önerilerin çoğu ya bir kabuktan çalışmaz, dbus çalışmadığı sürece çalışmaz ya da gerçekte mevcut olmayan / yapılandırılmamış cihazları listeler. Bu, tüm / dev aygıtlarını kontrol etmekten daha hızlıdır.
Steve Baker

5
lsblk bu daha iyi
emj365

1
/ proc / partitions, Cygwin'deki sürücü harfini de verir.
katriel

72

fdisk -lEC2 xvda cihazları gibi garip kurulumlarda bile her zaman oldukça iyi çalışıyor gibi görünen yapabilirsiniz .

Burada m1.large örneği için bir döküm yer almaktadır:

root@ip-10-126-247-82:~# fdisk -l

Disk /dev/xvda1: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda1 doesn't contain a valid partition table

Disk /dev/xvda2: 365.0 GB, 365041287168 bytes
255 heads, 63 sectors/track, 44380 cylinders, total 712971264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

Disk /dev/xvda3: 939 MB, 939524096 bytes
255 heads, 63 sectors/track, 114 cylinders, total 1835008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda3 doesn't contain a valid partition table

Derken mount:

root@ip-10-126-247-82:~# mount
/dev/xvda1 on / type ext4 (rw)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/xvda2 on /mnt type ext3 (rw)

Ve /proc/partitionsdiyor ki:

root@ip-10-126-247-82:~# cat /proc/partitions
major minor  #blocks  name

 202        1   10485760 xvda1
 202        2  356485632 xvda2
 202        3     917504 xvda3

Kenar notu

Nasıl fdisk -lçalışır, kendimi tanımayı çok isterim.


9
Nasıl fdisk -lçalıştığını çözdünüz mü emin değilim , ama bilmek isteyeceğinizi düşündüm: okur /proc/partitionsve daha sonra sysfs'deki /sys/dev/block/*aygıtların gerçek repr'lerine bir dizi sembolik bağ içeren yineler . :)fdiskstrace

1
Harika! Teşekkürler. (OT: Bu sorunun kilitli olduğunu görmek berbat. "Kilidi geri döndürme oyu" düğmesi olmalıdır).
Maxim Veksler

1
3k rep ve üstü kullanıcılar için vardır ("yeniden aç" düğmesi).

gerçekten? O zaman olabildiğince hızlı 3k'ye ulaşmalıyım.
Maxim Veksler

evet, daha fazla rep ile yapabileceğiniz şeylerin tam listesi için ayrıcalıklar sayfasına bakın .

35

lsblk'yi de deneyebilirsiniz ... util- linux'ta ... ama benim de bir sorum var

fdisk -l /dev/sdl

sonuç yok

grep sdl /proc/partitions      
   8      176   15632384 sdl
   8      177   15628288 sdl1

lsblk | grep sdl
sdl       8:176  1  14.9G  0 disk  
`-sdl1    8:177  1  14.9G  0 part  

fdisk iyi ama o kadar da iyi değil ... her şeyi "göremiyor" gibi görünüyor

benim özel örneğimde, içinde ayrıca bir kart okuyucu bulunan bir çubuğum var ve sadece fdisk kullanan çubuğu görebiliyorum:

fdisk -l /dev/sdk

Disk /dev/sdk: 15.9 GB, 15931539456 bytes
255 heads, 63 sectors/track, 1936 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xbe24be24

   Device Boot      Start         End      Blocks   Id  System
/dev/sdk1   *        8192    31116287    15554048    c  W95 FAT32 (LBA)

ama kart değil (kart / dev / sdl)

ayrıca, dosya -s verimsizdir ...

file -s /dev/sdl1
/dev/sdl1: sticky x86 boot sector, code offset 0x52, OEM-ID "NTFS    ", sectors/cluster 8, reserved sectors 0, Media descriptor 0xf8, heads 255, hidden sectors 8192, dos < 4.0 BootSector (0x0)

bu güzel ... AMA

fdisk -l /dev/sdb
/dev/sdb1            2048   156301487    78149720   fd  Linux raid autodetect
/dev/sdb2       156301488   160086527     1892520   82  Linux swap / Solaris

file -s /dev/sdb1
/dev/sdb1: sticky \0

fdisk ile erişilemeyen bir disk hakkındaki bilgileri görmek için parted kullanabilirsiniz:

parted /dev/sdl print

Model: Mass Storage Device (scsi)
Disk /dev/sdl: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  16.0GB  16.0GB  primary  ntfs




arted /dev/sdb print 
Model: ATA Maxtor 6Y080P0 (scsi)
Disk /dev/sdb: 82.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  80.0GB  80.0GB  primary                  raid
 2      80.0GB  82.0GB  1938MB  primary  linux-swap(v1)

9

ls /sys/block


bölümleri listelemez. İlk sorunun bu olup olmadığından emin değilim.
Mark Baker

1
/ Sys / block hakkında hiç bir şey bilmiyordum - aynı zamanda DVD sürücüsü gibi yazılamayan aygıtları da
warren

1
Aslında bölümleri listelemez - alt dizinleri de kontrol edebilirsiniz, "dev", "stat" ve "uevent" adlı minimum dosyalarda ve "holders" adlı alt dizinlerde bulunan tüm alt dizinleri arayabilirsiniz. DVD'ler hala depolama sınıfı aygıtlardır :)
Mihai Limbășan

3
moocha, neden cevabını biraz genişletmiyorsun?
SpoonMeiser

2
@warren - muhtemelen / dev / dvd, bir / dev / sd * veya / dev / hd * aygıtı için bir takma ad olacaktır, bu yüzden yine de bu sorunu yaşayacaktınız.
SpoonMeiser

7

HAL (kernel 2.6.17 ve üstü) kullanma:


#! /bin/bash
hal-find-by-property --key volume.fsusage --string filesystem |
while read udi ; do
    # ignore optical discs
    if [[ "$(hal-get-property --udi $udi --key volume.is_disc)" == "false" ]]; then
        dev=$(hal-get-property --udi $udi --key block.device)   
        fs=$(hal-get-property --udi $udi --key volume.fstype) 
        echo $dev": "$fs
    fi 
done

4

Modern linux sistemleri normalde var olan aygıtlar için yalnızca / dev içinde girişlere sahip olacaktır, bu nedenle önerdiğiniz gibi hda * ve sda ​​* 'dan geçmek oldukça iyi çalışacaktır.

Aksi takdirde / proc içinde kullanabileceğiniz bir şey olabilir. Oraya hızlı bir şekilde baktığımda, / proc / partitions'ın ihtiyacınız olanı yapabileceğini söylemiştim.


2

libsysfs potansiyel olarak yararlı görünebilir, ancak doğrudan bir kabuk betiğinden değil. Onunla birlikte gelen ve istediğiniz şeyi yapacak olan systool adında bir program var, ancak sizin için başka bir program kullanmak yerine / sys'e doğrudan bakmak daha kolay olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.