Jak wyświetlić wszystkie partycje w formacie drzewnym (podstawowym, rozszerzonym i logicznym)?

11

Próbuję znaleźć coś, co przypomina dane wyjściowe, findmntale z woluminami zamiast punktów montowania (przykład):

TARGET                       TYPE        FSTYPE  
sda 
├─sda1                       Primary     ext4
│ └─/
├─sda2                       Primary     NTFS    
├─sda3                       Primary     ext4 
│ └─/boot
└─sda4                       Extended
  ├─sda5                     Logical     ext4
  │ └─/home
  └─sda6                     Logical     ext4
    └─/var

Pokaz TYPE i FSTYPE jest opcjonalny, bardziej interesuje mnie układ drzewa.

Dane wyjściowe lsblksą nieco niekompletne, ponieważ nie pokazują różnic między partycją podstawową, rozszerzoną i logiczną. (Wiem, że jestem wybredny):

lsblk -a
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 186.3G  0 disk 
├─sda1   8:1    0 106.6G  0 part 
├─sda2   8:2    0  52.8G  0 part /media/F66E431C6E42D551
├─sda3   8:3    0  1023M  0 part [SWAP]
├─sda4   8:4    0     1K  0 part 
├─sda5   8:5    0   953M  0 part /boot
├─sda6   8:6    0   487M  0 part [SWAP]
├─sda7   8:7    0    14G  0 part /
└─sda8   8:8    0  10.5G  0 part /home

Wiem, że sda4partycja rozszerzona obejmuje sda5, sda6, sda7, sda8partycje logiczne; ale gdybym widział kogoś innego, nie wiedziałbym. Jeśli zamiast parti diskmówi pri logi extbyłby dobrą alternatywą, przynajmniej znam związek. Ale skoro wszystkie są part... bezużyteczne.

sudo fdisk -l wynik:

Disk /dev/sda: 200.0 GB, 200049647616 bytes
255 heads, 63 sectors/track, 24321 cylinders, total 390721968 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: 0x1549f232

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63   223629311   111814624+   7  HPFS/NTFS/exFAT
/dev/sda2       225724416   336437306    55356445+   7  HPFS/NTFS/exFAT
/dev/sda3       223629312   225724415     1047552   82  Linux swap / Solaris
/dev/sda4       336439294   390721535    27141121    5  Extended
/dev/sda5       336439296   338391039      975872   83  Linux
/dev/sda6       338393088   339390463      498688   82  Linux swap / Solaris
/dev/sda7       339392512   368687103    14647296   83  Linux
/dev/sda8       368689152   390721535    11016192   83  Linux

Partition table entries are not in disk order
Braiam
źródło

Odpowiedzi:

5

Jeśli wszystko, czego chcesz, to lsblkpokazuje partycje podstawowe / logiczne, powinieneś być w stanie to zrobić za pomocą kombinacji fdiski parsowania. fdisk -ljeśli uruchomiony jako root, wyświetli wszystkie partycje i oznaczy rozszerzone Ext'd:

# fdisk -l | grep dev
Disk /dev/sda: 500.1 GB, 500107862016 bytes
/dev/sda1              63       80324       40131   de  Dell Utility
/dev/sda2   *       81920    30801919    15360000    7  HPFS/NTFS/exFAT
/dev/sda3        30801920   194643539    81920810    7  HPFS/NTFS/exFAT
/dev/sda4       194643601   976773119   391064759+   f  W95 Ext'd (LBA)
/dev/sda5       194643603   198836504     2096451    c  W95 FAT32 (LBA)
/dev/sda6       342951936   960387071   308717568   83  Linux
/dev/sda7       198840320   342949887    72054784   83  Linux
/dev/sda8       960389120   976773119     8192000   82  Linux swap / Solaris

Następnie możesz połączyć to z odrobiną analizy, aby uzyskać pożądany wynik:

$ lsblk -a | perl -lpe 'BEGIN{open(A,"sudo fdisk -l |");
                      while(<A>){next unless /Ext/; 
                                 $k{$1}++ if /^.*?(...\d)\s/; }} 
                      @a=split(/\s+/);
                      $a[0]=~s/\W+//;
                      s/$a[5]/Extended/ if defined($k{$a[0]});'
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk 
├─sda1   8:1    0  39.2M  0 part 
├─sda2   8:2    0  14.7G  0 part 
├─sda3   8:3    0  78.1G  0 part /winblows
├─sda4   8:4    0     1K  0 Extended 
├─sda5   8:5    0     2G  0 part 
├─sda6   8:6    0 294.4G  0 part /home
├─sda7   8:7    0  68.7G  0 part /
└─sda8   8:8    0   7.8G  0 part [SWAP]

Myślę, że to najlepsze, co możesz zrobić, ponieważ findmntnie wyświetla rozszerzonych partycji, ponieważ nigdy nie zostaną zamontowane. W przeciwnym razie można go przeanalizować w ten sam sposób.

terdon
źródło
5

blkid

Możesz użyć polecenia, blkidaby pokazać coś wzdłuż tych linii:

$ blkid
/dev/sda1: LABEL="SYSTEM_DRV" UUID="XXXXXX" TYPE="ntfs" 
/dev/sda2: LABEL="Windows7_OS" UUID="XXXXX" TYPE="ntfs" 
/dev/sda3: LABEL="Lenovo_Recovery" UUID="XXXX" TYPE="ntfs" 
/dev/sda5: UUID="XXXX" TYPE="ext4" 
/dev/sda6: UUID="XXXX" TYPE="LVM2_member" 
/dev/mapper/vg_grinchy-lv_root: UUID="XXXX" TYPE="ext4" 
/dev/mapper/vg_grinchy-lv_swap: UUID="XXXX" TYPE="swap" 
/dev/mapper/vg_grinchy-lv_home: UUID="XXXX" TYPE="ext4" 

Usunąłem UUID z góry i zastąpiłem je znakami X. Polecenie blkidmoże również przyjmować argumenty, jeśli chcesz mieć inne dane wyjściowe.

Na przykład:

$ blkid -o list
device                         fs_type      label         mount point                        UUID
----------------------------------------------------------------------------------------------------------------------------------
/dev/sda1                      ntfs         SYSTEM_DRV    (not mounted)                      XXXX
/dev/sda2                      ntfs         Windows7_OS   (not mounted)                      XXXX

lsblk

Alternatywnym narzędziem blkidjest lsblk. Możesz użyć następujących opcji, aby wyświetlić listę wszystkich urządzeń blokowych:

$ lsblk -a
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                          7:0    0         0 loop 
loop1                          7:1    0         0 loop 
loop2                          7:2    0         0 loop 
loop3                          7:3    0         0 loop 
loop4                          7:4    0         0 loop 
loop5                          7:5    0         0 loop 
loop6                          7:6    0         0 loop 
loop7                          7:7    0         0 loop 
sda                            8:0    0 465.8G  0 disk 
├─sda1                         8:1    0   500M  0 part /boot
└─sda2                         8:2    0 465.3G  0 part 
  ├─vg_totoro-lv_root (dm-0) 253:0    0 431.5G  0 lvm  /
  ├─vg_totoro-lv_swap (dm-1) 253:1    0  13.8G  0 lvm  [SWAP]
  └─vg_totoro-lv_home (dm-2) 253:2    0    20G  0 lvm  /home
sr0                           11:0    1  1024M  0 rom  

Sprawdź jego użycie, wymaga dodatkowych opcji.

slm
źródło
Niestety nie pokazuje mi to rozszerzonych tomów ani organizacji.
Braiam
@Braiam - Widzę, czego szukasz, chcesz także zobaczyć partycje w partycjach rozszerzonych. Hmm ...
slm
@Braiam - czy to pomaga?
slm
Spojrzałem na to wcześnie, nie uzyskałem oczekiwanych rezultatów. Pokazuje mi partycje, ale nie mam sposobu na odróżnienie objętości logicznych od pierwotnych ... mm ... bardziej pogrubienie ...
Braiam
3

Możesz wyświetlić listę typów partycji za pomocą parted:

$ sudo parted /dev/sda print
Model: ATA ST3320613AS (scsi)
Dysk /dev/sda: 320GB
Rozmiar sektora (logiczny/fizyczny): 512B/512B
Tablica partycji: msdos

Numer  Początek  Koniec  Rozmiar  Typ       System plików   Flaga
 1     1049kB    318GB   318GB    primary   ext4            ładowalna
 2     318GB     320GB   2145MB   extended
 5     318GB     319GB   1074MB   logical   linux-swap(v1)
 6     319GB     320GB   1071MB   logical   ext2

Nie ma drzewa, ale może pomóc, ponieważ, jak powiedziałeś, dobrze byłoby przynajmniej poznać związek. Jeśli chcesz korzystać z GUI, możesz wypróbować GParted:

wprowadź opis zdjęcia tutaj

Nykakin
źródło
Spojrzałem na to wcześnie, nie uzyskałem oczekiwanych rezultatów. Pokazuje mi partycje, ale nie mam sposobu na odróżnienie objętości logicznych od pierwotnych ... mm ... bardziej pogrubienie ...
Braiam
1
@Braiam, zaktualizowałem swoją odpowiedź. Niestety nie znalazłem żadnego sposobu na wykonanie drzewa z linii poleceń.
Nykakin,
Wydaje się, że będzie to jedyne rozwiązanie ... btw, napraw tę partycję NTFS: P
Braiam
To tylko ekran z Internetu, jak widać, różni się od wyjścia z wiersza poleceń :)
Nykakin