Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: karlitos 02 Února 2011, 01:14:55

Název: jak vypsat seznam oddilu
Přispěvatel: karlitos 02 Února 2011, 01:14:55
Zdravim

Snazim se v ramci uceni pythonu vylepsit skript pro mountovani Truecrypt jednotek v XBMC. Problem je ze potrebuju seznam oddilu v systemu.
To se sice da krasne poresit i primo v bashi pomoci :
Kód: [Vybrat]
cat /proc/partitions | grep sd | awk '{ print $4 }'

jenze vypis je :
Kód: [Vybrat]
sda
sda1
sda2
sda5
sdb
sdb1
No a ted jak INTELIGENTNE vyhodit sda a sdb jelikoz se nejedna ooddily ale disky a jak vytridit sda2 coz je logicky oddil ?

Navic si nejsem jisty tim | grep sd, neni to tak ze pametove karty jsou pod /dev/mmcblk nebo podobne ?

Primo v pythonu jsem nasel mozna elegantnejsi reseni :
Kód: [Vybrat]
import os
fh = file('/proc/partitions')

fh.readline() # eat the header
fh.readline() # eat the blank line

partitions = [line.split()[-1] for line in fh.readlines()]

Jde mi spis o princip nez o to jak to naprogramovat. Muzu treba vyhodit vsechny triznakove identifikatory sda,sdb,sdc ... ale to je taky trochu hloupa metoda.
Takze spis hledam jak identifikovat jestli sdxy je fyzicky oddil.

Diky za tipy K
Název: Re: jak vypsat seznam oddilu
Přispěvatel: MacHala 02 Února 2011, 01:33:56
Kód: [Vybrat]
cat /proc/partitions | awk '{ print $4 }' | grep -E '^.*[0-9]$'?

EDIT: sorry, pul druhe rano, ten logicky oddil jsem nejak preskocil... jak pise ETNyx, bude potreba nejaky jiny vypis

EDIT2: ten jiny vypis by mohl byt blkid
Název: Re: jak vypsat seznam oddilu
Přispěvatel: ETNyx 02 Února 2011, 07:49:45
Kód: [Vybrat]
cat /proc/partitions | awk '{ print $4 }' | grep -E '^.*[0-9]$'?
Furt tam je ten logickej oddíl :-)


Kód: [Vybrat]
fdisk -l | grep -E '^/dev/' | grep -v Rozšířený | grep -v Extended | awk '{print $1}'nicméně to asi bude chtít roota nebo sudo,...
Název: Re: jak vypsat seznam oddilu
Přispěvatel: Uran 02 Února 2011, 10:26:33
Zdravim

Snazim se v ramci uceni pythonu vylepsit skript pro mountovani Truecrypt jednotek v XBMC. Problem je ze potrebuju seznam oddilu v systemu.
To se sice da krasne poresit i primo v bashi pomoci :
Kód: [Vybrat]
cat /proc/partitions | grep sd | awk '{ print $4 }'

jenze vypis je :
Kód: [Vybrat]
sda
sda1
sda2
sda5
sdb
sdb1
No a ted jak INTELIGENTNE vyhodit sda a sdb jelikoz se nejedna ooddily ale disky a jak vytridit sda2 coz je logicky oddil ?

Navic si nejsem jisty tim | grep sd, neni to tak ze pametove karty jsou pod /dev/mmcblk nebo podobne ?
.
.
.

Je to trochu prasarna, ale co treba zkusit:
Kód: [Vybrat]
df | grep /dev | grep -v none | awk {'print $1'}
Název: Re: jak vypsat seznam oddilu
Přispěvatel: GdH 02 Února 2011, 14:48:29
Tak v tomto případě bych to nedramatizoval

Kód: [Vybrat]
cat /proc/partitions | grep -o sd..

Edit: no dobrá, taky mi asi něco uniklo, snad později :)
Název: Re: jak vypsat seznam oddilu
Přispěvatel: ETNyx 02 Února 2011, 18:08:52
Je to trochu prasarna, ale co treba zkusit:
Kód: [Vybrat]
df | grep /dev | grep -v none | awk {'print $1'}

pravděpodobně bude nežádoucí, že df vrací i jiné věci, než-li disky (tmpfs, udev, shm)

BTW: když o tom tak přemýšíl tak přes fdisk to taky není ideální, protože pokud budou disky v raidu tak vrati jak raid tak jednotlive oddily disku ???
Název: Re: jak vypsat seznam oddilu
Přispěvatel: karlitos 03 Února 2011, 00:31:01
Zdravim

Predne diky moc vsem za tipy. Dival jsem se primo do Truecryptu a ten zobrazi i disky (sda,sdb...) ale vynecha logicke oddily. Jde mi o to ze se snazim ten skript upravit aby  ho zvladla pouzivat i rodina ktera je celkem IT analfabeti, takze nejake sda1 nebo mmcblk je pro ne dost matouci. Takze hledam jak zjistit informaci o labelu - ten se ale lisi podle typu - velikosti, pripojnem bodu a jestli je dany oddil logicky nebo ne.
A treba kdyz u me situace vypada nasledovne :
Kód: [Vybrat]
sudo fdisk -l

Disk /dev/sda: 60,0 GB, 60 011 642 880 bajtů
hlav: 255, sektorů na stopu: 63, cylindrů: 7 296
Jednotky = cylindry po 16065 * 512 = 8 225 280 bajtech
Velikost sektoru (logického/fyzického): 512 bajtů / 512 bajtů
Velikost I/O (minimální/optimální): 512 bajtů / 512 bajtů
Identifikátor disku: 0x2527a2c7

Zařízení Zavádět   Začátek       Konec    Bloky    Id  Systém
/dev/sda1   *           1        6992    56163208+  83  Linux
/dev/sda2            6993        7296     2441849+   5  Rozšířený
/dev/sda5            6993        7296     2441848+  82  Linux swap/Solaris

Disk /dev/sdb: 65 MB, 65 536 000 bajtů
hlav: 8, sektorů na stopu: 32, cylindrů: 500
Jednotky = cylindry po 256 * 512 = 131 072 bajtech
Velikost sektoru (logického/fyzického): 512 bajtů / 512 bajtů
Velikost I/O (minimální/optimální): 512 bajtů / 512 bajtů
Identifikátor disku: 0x0006b58f

Zařízení Zavádět   Začátek       Konec    Bloky    Id  Systém
/dev/sdb1   *           1         500       63972+  83  Linux

ale fd poskytne :
Kód: [Vybrat]
/dev/sda1              53G  3,7G   47G   8% /
none                  491M  268K  491M   1% /dev
none                  497M  244K  496M   1% /dev/shm
none                  497M   80K  497M   1% /var/run
none                  497M     0  497M   0% /var/lock

Vubec nezobrazi velikost sda2, sda5 co je docela zajimave voditko (malokdo neznaly vi v jakem poradi ma oddily ale obvykle zna jejich velikost)

Pro uplnost pridavam cast toho python-skryptu kde se zjistuji oddily a jejich velikost :
Kód: [Vybrat]
# Get partition info
part_info = []
for i,v in enumerate(partitions):
size = ''.join(self.runcmd("df -h | grep "+v+" | awk '{ print $2 }'")).replace('\n',' ')
mountpoint = ''.join(self.runcmd("df -h | grep "+v+" | awk '{ print $6 }'")).replace('\n',' ')
part_info.append([v,size,mountpoint])

part_info_text = part_info
for i,v in enumerate(part_info):
part_info_text[i][0] = v[0]
if v[0].isalpha() or v[1] == '': # == drives ex. sda OR unmounted partitions -> df is unable to get size
part_info_text[i][1] = ''
part_info_text[i][2] = ''
else:
part_info_text[i][1] = ' | size: '+v[1]
part_info_text[i][2] = ' | mountpoint: '+v[2]

Kazdopadne Truecrypt zvladne zobrazit ne-logicke oddily a jejich velikost.


EDIT : filesystem umi i df : df -hT
Název: Re: jak vypsat seznam oddilu
Přispěvatel: karlitos 03 Února 2011, 00:52:36
Halelujah praise the lord : http://code.google.com/p/inxi/ (http://code.google.com/p/inxi/)
Kód: [Vybrat]
./inxi -D
Disks:     HDD Total Size: 60.1GB (6.4% used) 1: /dev/sda HTS421260H9AT00 60.0GB
           2: /dev/sdb 5in1_Adapter 0.1GB

./inxi -pl
Partition: ID:/ size: 53G used: 3.7G (8%) fs: ext4 dev: /dev/sda1 label: linux
           ID:swap-1 size: 2.50GB used: 0.02GB (1%) fs: swap dev: /dev/sda5 label: N/A

Ale kam zmizela pametova karta sdb  :-[ saaakrys

EDIT : kdo umi cist help ma jasnou vyhodu  ;D
(pripojil jsem jeste USB disk pro testovani)
Kód: [Vybrat]
./inxi -plo
Partition: ID:/ size: 53G used: 3.7G (8%) fs: ext4 dev: /dev/sda1 label: linux
           ID:/media/KINGSTON size: 62M used: 4.1M (7%) fs: vfat dev: /dev/sdc1 label: KINGSTON
           ID:swap-1 size: 2.50GB used: 0.02GB (1%) fs: swap dev: /dev/sda5 label: N/A
Unmounted: ID: /dev/sdb1 size: 0.07G label: N/A uuid: ab91ede4-1553-4d81-a349-79f5394de511 fs: ext4

Takze tim mame VSECHNY data bez roota a ted jak to roztridit ?
Navic inxi potrebuje gawk - lze treba do slozky s inxi dat binarku a odkazat inxi na ni aby se gawk nemuselo pro pouzivani instalovat ?
Název: Re: jak vypsat seznam oddilu
Přispěvatel: karlitos 03 Února 2011, 09:56:10
Bon Apetit !!
Kód: [Vybrat]
# partprobe -ds
/dev/sda: msdos partitions 1 2 3 <5 6>
/dev/sdb: msdos partitions 1

Diky ale opet to potrebuju spoustet alespon se sudem. Zkusim si poradit s tim inxi, tady uz jde spis o to zjistit jak zadat pythonu aby se spustil script v relativnim umisteni atd ...
Název: Re: jak vypsat seznam oddilu
Přispěvatel: GdH 03 Února 2011, 10:32:23
Takze tim mame VSECHNY data bez roota a ted jak to roztridit ?
Navic inxi potrebuje gawk - lze treba do slozky s inxi dat binarku a odkazat inxi na ni aby se gawk nemuselo pro pouzivani instalovat ?

Ty stále hledáš "čistá řešení" a pak vezmeš kód, který má pět tisíc řádků, abys z něj využil dva a ještě řešíš jako ho očůrat. Tomu nerozumím ;)
Název: Re: jak vypsat seznam oddilu
Přispěvatel: karlitos 03 Února 2011, 11:08:07
Dobre vysvetlim :
Jako ciste reseni jsem myslel takove, ktere bude zcela univerzalni. Vykuchal jsem pametovou kartu z mobilu a strcil ji do notasu a inxi mi vypise :
Kód: [Vybrat]
Partition: ID:/ size: 53G used: 3.6G (8%) fs: ext4 dev: /dev/sda1 label: linux
           ID:/var/lib/ureadahead/debugfs size: 53G used: 3.6G (8%) fs: debugfs dev: N/A label: N/A
           ID:/media/KINGSTON size: 62M used: 4.1M (7%) fs: vfat dev: /dev/sdb1 label: KINGSTON
           ID:/media/161F-C18E size: 1.9G used: 361M (19%) fs: vfat dev: /dev/mmcblk0p1 label: N/A
           ID:swap-1 size: 2.50GB used: 0.00GB (0%) fs: swap dev: /dev/sda5 label: N/A
Unmounted: ID: /dev/sdc1 size: 0.07G label: N/A uuid: ab91ede4-1553-4d81-a349-79f5394de511
           ID: /dev/mmcblk0 size: 2.01G label: N/A uuid: N/A
Pokud bych jak GdH navrhoval pouzil neco ve smyslu cat /proc/partitions | grep -o sd.. tak mi mmcblk0 unikne. Takze resenim by bylo nastudovat si jak vsechny soucasne distribuce pripojuji disky a externi media a udelat nejake krutoprisne hledani vech moznych retezcu ... No a to panove co vyvinuli inxi udelali za me -  a jak se zda dobre a univerzalne.
Samozrejme naprosty purismus by byl najit si v tom inxi cast ktera identifikuje disky a oddily a pouzit jen tu ... dobre, tak to proste nedavam  :). Pouzit inxi a vzit si jen to co me zajima zda se fuguje  univerzalne a navic mi jeste da veskere informace najednou.

Srozumenni ?  :)

S tim ocuranim bych to nevidel tak dramaticky kdo si nainstaluje gawk tak je v pohode. Ale jedna se o skript k xbmc a ted by mel fungovat out-of-the-box, takze gawk v nejake aktualni verzi by mel byt prilozen.
Název: Re: jak vypsat seznam oddilu
Přispěvatel: MacHala 03 Února 2011, 18:01:25
no, awk jako soucast systemu definuje LSB Core Specification a nevim o zadnem linuxovem distru ktere by pouzivalo jinou implementaci awk nez gawk => opravdu by me prekvapilo, kdyby v xbmc defaultne nebyl
Název: Re: jak vypsat seznam oddilu
Přispěvatel: karlitos 03 Února 2011, 18:04:57
No xbmc jsem netestoval to je pravda, zatim jsem to zkousel z Lubuntu 10.10. a tam se musi gawk doinstalovat.
Název: Re: jak vypsat seznam oddilu
Přispěvatel: starenka 04 Února 2011, 15:12:08
Primo v pythonu jsem nasel mozna elegantnejsi reseni :
Kód: [Vybrat]
import os
fh = file('/proc/partitions')

fh.readline() # eat the header
fh.readline() # eat the blank line

partitions = [line.split()[-1] for line in fh.readlines()]

imo spis takhle

Kód: [Vybrat]
#!/usr/bin/env python
# -*- coding: utf-8 -*-

f = open('/proc/partitions')
partitions = [line.split()[-1].strip() for line in f.readlines()[2:]]
f.close()