2008-10-14 11 views
101

मुझे किसी दिए गए मशीन से जुड़े सभी लिखने योग्य स्टोरेज डिवाइसों को खोजने की आवश्यकता है, चाहे वे घुड़सवार हों या नहीं।लिनक्स मशीन से जुड़े सभी स्टोरेज डिवाइस

यह करने के लिए होने के लिए कोशिश/dev में प्रत्येक प्रविष्टि कि एक लिखने योग्य उपकरणों (hd* and sd*) से मेल खाती है ......

वहाँ एक बेहतर समाधान है, या मैं के साथ रहना चाहिए बासी रास्ता यह वाला?

+0

आप विभाजन की एक सूची चाहते हैं जब से तुम उन्हें शायद घुड़सवार होने के बारे में बात करते हैं, मुझे लगता है कि नहीं, की डिस्क? –

+0

विभाजन ठीक हैं, हाँ, हाँ :) .. अगर मुझे विभाजन पता है, तो मुझे यह भी पता चलेगा कि भौतिक उपकरण – warren

+2

उपलब्ध हैं क्योंकि [यूनिक्स और लिनक्स] (http://unix.stackexchange.com) अब उपलब्ध है, इस प्रश्न को – warren

उत्तर

73

/proc/partitions सिस्टम द्वारा मान्यता प्राप्त सभी ब्लॉक डिवाइस और विभाजन सूचीबद्ध करेगा। विभाजन के समय, यदि कोई हो, तो यह निर्धारित करने के लिए आप file -s <device> का उपयोग करने का प्रयास कर सकते हैं।

+4

यह उदाहरण के लिए सीडी/डीवीडी ड्राइव को ओमिट करता है (मुझे पता है कि वे आम तौर पर लिखने योग्य नहीं होते हैं) – pixelbeat

+0

शैल से आप क्या कर सकते हैं इस पर एक सीमा है। अधिकतर रेट किए गए अधिकांश सुझाव या तो शैल से काम नहीं करते हैं, तब तक काम नहीं करेंगे जब तक कि डीबीएस चल रहा न हो, या उन डिवाइसों को सूचीबद्ध करेगा जो वास्तव में मौजूद/कॉन्फ़िगर नहीं हैं। यह सभी/dev उपकरणों की जांच करने से बस तेज है। –

+4

lsblk यह बेहतर है – emj365

3

आधुनिक लिनक्स सिस्टम में आमतौर पर मौजूद उपकरणों के लिए/dev में प्रविष्टियां होंगी, इसलिए एचडीए * और एसडीए * के माध्यम से जा रहा है जैसा कि आप सुझाव देते हैं कि काफी अच्छा काम करेगा।

अन्यथा, कुछ ऐसा हो सकता है जिसमें आप उपयोग कर सकते हैं। वहां एक त्वरित रूप से, मैंने कहा होगा/proc/विभाजन दिखता है जैसे यह आपको चाहिए जो कर सकता है।

9

ls /sys/block

+0

विभाजन सूचीबद्ध नहीं करता है। मुझे यकीन नहीं है कि मूल सवाल क्या था या नहीं। –

+1

मुझे कभी भी/sys/block के बारे में पता नहीं था - हालांकि यह उन डिवाइसों को भी सूचीबद्ध करता है जो डीवीडी ड्राइव – warren

+1

की तरह लिखने योग्य नहीं हैं, वास्तव में यह विभाजन को सूचीबद्ध नहीं करता है - हालांकि आप उपनिर्देशिकाओं की जांच कर सकते हैं, नाम की न्यूनतम फ़ाइलों पर रखे सभी उपनिवेशियों की तलाश में " देव "," स्टेट "और" uevent "और उपनिवेशियों को" धारक "नाम दिया गया। डीवीडी अभी भी स्टोरेज क्लास डिवाइस हैं :) –

2

libsysfs संभावित रूप से उपयोगी दिखता है, लेकिन सीधे नहीं एक खोल स्क्रिप्ट से। एक कार्यक्रम है जो सिस्टूल कहलाता है जो आप चाहते हैं जो करेगा, हालांकि यह आपके लिए ऐसा करने के लिए किसी अन्य प्रोग्राम का उपयोग करने के बजाय सीधे/sys को देखना आसान हो सकता है।

7

एचएएल (कर्नेल 2.6.17 और ऊपर) का उपयोग करना:


#! /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 
65

तुम हमेशा fdisk -l जो, बहुत अच्छी तरह से काम करने के लिए भी इस तरह के EC2 xvda उपकरणों के रूप में अजीब व्यवस्था पर लगता है कर सकते हैं।

[email protected]:~# 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 

mount कहते हैं जबकि:

[email protected]:~# 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) 

और /proc/partitions का कहना है:

यहाँ एक m1.large उदाहरण के लिए एक डंप है

[email protected]:~# cat /proc/partitions 
major minor #blocks name 

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

साइड नोट

कैसे fdisk -l काम कुछ ऐसा है जो मुझे खुद को जानना अच्छा लगेगा।

+8

यह सुनिश्चित नहीं है कि आपने कभी काम किया है कि कैसे 'fdisk -l' काम करता है, लेकिन मैंने सोचा कि आप जानना चाहेंगे: यह '/ proc/partitions' पढ़ता है और फिर'/sys/dev/block/*' के माध्यम से पुनरावृत्त करता है जिसमें एक होता है sysfs में डिवाइस के वास्तविक repr के लिए symlinks का सेट। आप 'std' के तहत' fdisk' चलाकर यह जानकारी पा सकते हैं :) –

+1

बढ़िया! धन्यवाद। (ओटी: इस सवाल को लॉक करने के लिए बेकार है। "लॉक को वापस करने के लिए वोट" बटन होना चाहिए)। –

+1

3k प्रतिनिधि और उच्चतर (एक "फिर से खोलें" बटन) के उपयोगकर्ताओं के लिए है। –

33

आप भी lsblk कोशिश कर सकते हैं ... util-linux में है ... लेकिन मैं एक सवाल है भी

fdisk -l /dev/sdl 

कोई परिणाम

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 अच्छा है, लेकिन नहीं है कि अच्छा ...

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) 

नहीं बल्कि कार्ड: लगता है जैसे कि यह नहीं सब कुछ

मेरी विशिष्ट उदाहरण में "देख" सकता मेरे पास है वह भी एक कार्ड रीडर उस में निर्माण और मैं fdisk का उपयोग कर केवल छड़ी देख सकते हैं एक छड़ी है (कार्ड से किया जा रहा/dev/SDL)

भी फ़ाइल -s अक्षम है ...

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) 

अच्छा है कि ... लेकिन

+०१२३५१६४१०६
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 द्वारा accesed नहीं किया जा सकता के बारे में जानकारी देखने के लिए, आप जुदा उपयोग कर सकते हैं:

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)