Existuje příkaz, který vypíše všechny oddíly spolu s jejich štítky? Sudo fdisk -l
a Sudo parted -l
ve výchozím nastavení nezobrazovat štítky.
EDIT: (podle komentáře níže) Mluvím o značkách ext2 - těch, které můžete nastavit v gparted
po rozdělení.
EDIT2: Záměrem je vypsat seznam nespojených oddílů (takže vím, který z nich se připojí).
S udev můžete použít
ls -l /dev/disk/by-label
pro zobrazení symbolických odkazů podle označení alespoň některé uzly zařízení oddílů.
Nejste si jisti, jaká je logika začlenění, možná existence štítku.
lsblk
Například příkaz
Sudo lsblk -o name,mountpoint,label,size,uuid
výstupy:
NAME MOUNTPOINT LABEL SIZE UUID
sda 1.4T
├─sda1 /boot boot 953M f557b9f0-edb5-42bb-94d8-27bc03c3c2c7
├─sda2 46.6G 727fa348-8804-4773-ae3d-f3e176d12dac
│ └─sda2_crypt (dm-0) 46.6G P1kvJI-5iqv-s9gJ-8V2H-2EEO-q4aK-sx4aDi
│ ├─debian_crypt-swap (dm-1) [SWAP] 2G 3f9f24d7-86d1-4e21-93e9-f3c181d05cf0
│ ├─debian_crypt-tmp (dm-2) /tmp tmp 5G 93fc8219-f985-45fb-bd5c-2c7940a7512d
│ ├─debian_crypt-home (dm-3) /home home 6G 12e8566c-8f0f-45ec-8524-6d9d9ee91eae
│ └─debian_crypt-root (dm-4) / root 33.6G 9685570b-4c9e-43ea-815e-49d10dc7a1bf
├─sda3 651.9G d3e0436c-85f6-45c6-9d8f-28b79ee06102
│ └─crypt_gusto (dm-8) /media/Gusto Gusto 651.9G 0c084508-cb8b-4b61-832d-6b85273f33c4
├─sda4 1K
├─sda5 298G 5063da5f-9b68-43de-914c-32b89622bcc8
│ └─crypt_kabi (dm-7) /media/Kabi Kabi 298G e6a0b66c-8fe9-4e7b-9d54-7b2b430e109d
├─sda6 213.6G 5129d860-bb41-4393-b4b1-f8af53d9155d
│ └─crypt_zami (dm-6) /media/Zami Zami 213.6G 19101155-6070-4f37-b39d-19f28867c66b
├─sda7 /media/Server Server 85.6G a9f4dae5-901c-4f49-bb30-592de3000713
└─sda8 100.6G dc7f4586-a33d-4707-98e9-8b55c559b0d2
└─crypt_grafi (dm-5) /media/Grafi Grafi 100.6G 5e3242e1-ec7a-4806-92f7-88a126feea94
sdb 14.5G
├─sdb1 DEBIAN_LIVE 3G 6bf4d915-2b62-444e-a2c8-16307769b5c2
├─sdb2 2G 90ec6f73-8fdb-4c8d-aebd-cadd0f51b412
│ └─crypt_sdb2 (dm-10) /mnt data 2G 91e779dd-0a3f-40b2-8ad0-257d860541a6
└─sdb3 linux 9.5G 14a783a4-96dd-4a85-8de7-6e8eea230594
loop0 1000M a3be80bf-0f2c-44ed-8de5-d60e3b19c01a
└─crypt_dropbox (dm-9) /media/Dropbox Dropbox 998M 8461e2cf-ae17-449b-8ee5-29cc88688b8b
zram0 [SWAP] 250M f8254ae5-5ae6-4fda-b8ef-83f25c405894
zram1 [SWAP] 250M 7e7ed90d-731c-422a-bf9b-828f09b80502
Můžete zadat spoustu sloupců v libovolném pořadí:
Available columns:
NAME device name
KNAME internal kernel device name
MAJ:MIN major:minor device number
FSTYPE filesystem type
MOUNTPOINT where the device is mounted
LABEL filesystem LABEL
UUID filesystem UUID
RO read-only device
RM removable device
MODEL device identifier
SIZE size of the device
STATE state of the device
OWNER user name
GROUP group name
MODE device node permissions
ALIGNMENT alignment offset
MIN-IO minimum I/O size
OPT-IO optimal I/O size
PHY-SEC physical sector size
LOG-SEC logical sector size
ROTA rotational device
SCHED I/O scheduler name
RQ-SIZE request queue size
TYPE device type
DISC-ALN discard alignment offset
DISC-GRAN discard granularity
DISC-MAX discard max bytes
DISC-ZERO discard zeroes data
Existuje příkaz blkid , který může být tím, co hledáte. Výsledky jsou podobné následujícímu:
$ Sudo blkid /dev/mapper/vg_rootdisk-lv_var
/dev/mapper/vg_rootdisk-lv_var: LABEL="LV_VAR" UUID="08520908-03cd-4e42-a4e4-0f5a771be16c" TYPE="ext4"
Další možností je použít příkaz udevadm , který vám pravděpodobně poskytne mnohem více, než potřebujete:
$ Sudo udevadm info --query=all --name=/dev/mapper/vg_rootdisk-lv_var
Zkuste použít tento příkaz:
e2label /dev/sda2
Zkuste použít mount -l
, funguje to pro mě dobře.
V novějších verzích jádra Linuxu lze tyto informace nyní najít pod /dev/disk
.
$ ls -l /dev/disk
total 0
drwxr-xr-x 2 root root 300 Mar 4 18:43 by-id
drwxr-xr-x 2 root root 140 Mar 4 18:21 by-label
drwxr-xr-x 2 root root 80 Mar 4 18:18 by-path
drwxr-xr-x 2 root root 200 Mar 4 2015 by-uuid
Takže ji najdete podle by-id
, by-label
, by-path
nebo by-uuid
.
by-id
$ ls -l /dev/disk/by-id
total 0
lrwxrwxrwx. 1 root root 9 Jan 11 17:01 ata-Optiarc_DVD_RW_AD-7930H -> ../../sr0
lrwxrwxrwx. 1 root root 9 Jan 11 17:01 ata-ST95005620AS_5YX1K0Q5 -> ../../sda
lrwxrwxrwx. 1 root root 10 Jan 11 17:01 ata-ST95005620AS_5YX1K0Q5-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Jan 11 17:01 ata-ST95005620AS_5YX1K0Q5-part2 -> ../../sda2
...
...
by-uuid
$ ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx. 1 root root 10 Jan 11 17:01 xxxxxx -> ../../sda1
lrwxrwxrwx. 1 root root 10 Jan 11 17:01 xxxxxx -> ../../dm-1
lrwxrwxrwx. 1 root root 10 Jan 11 17:01 xxxxxx -> ../../dm-0
lrwxrwxrwx. 1 root root 10 Jan 11 17:01 xxxxxx -> ../../dm-2
Kde xxxxxx
by bylo skutečné UUID, například 5ece678c-1234-5678-12e3-88c06ec11111
.
vedlejší značka
$ ls -l /dev/disk/by-label/
total 0
lrwxrwxrwx 1 root root 10 Mar 4 18:21 LABEL1 -> ../../sda4
lrwxrwxrwx 1 root root 10 Mar 4 18:17 LABEL2 -> ../../sda3
lrwxrwxrwx 1 root root 10 Mar 4 18:21 LABEL3 -> ../../sda6
lrwxrwxrwx 1 root root 10 Mar 4 18:42 LABEL4 -> ../../sda7
lrwxrwxrwx 1 root root 10 Mar 4 18:20 LABEL5 -> ../../sda5
Kde LABEL1
, LABEL2
, ... atd. jsou label, který zobrazuje symbolické odkazy na skutečný oddíl (např. /dev/sda3
).
Tím nebudou uvedeny všechny oddíly, ale pomocí tune2fs
.
$ Sudo tune2fs -l /dev/sda1
Pomocí tohoto příkazu můžete získat všechny /dev/sda*
zařízení.
$ Sudo sh -c 'echo /dev/sda* /dev/mapper/Fedora* | xargs -n 1 tune2fs -l'
Můžete také použít tento příkaz:
$ Sudo udevadm info --query all --path /sys/block/sdb/sdb1 \
| grep ID_PART_ENTRY_NAME
Pomocí výše uvedeného můžete vytisknout informace o všech blokových zařízeních.
$ echo /sys/block/* | xargs -n 1 udevadm info --query all --path
V terminálu typu Linux (konzole):
blkid
Následován Enter
Výsledkem je seznam blokových zařízení, každá s LABEL a TYPE
Pokud chcete, můžete použít můj bash skript pro tento účel. Ve skutečnosti to dělá trochu víc, než potřebujete. E. ukáže také, kolik místa je využito. Doufám, že se vám bude líbit :) A také doufám, že výstup bude stejně čistý jako na mém linuxovém boxu ... (Poznámka: zobrazí pouze skutečné hardware, jako jsou vaše pevné disky a DVD-ROM, ale to je pro mé účely dostačující.)
Důležitá poznámka: Tento skript může být spuštěn pod Sudo
ONCE kvůli blkid
. Alespoň na mé distro, blkid -o export
bude výstup nulový, když bude spuštěn jako běžný uživatel po spuštění . Je tomu tak proto, že v „běžném uživatelském ztvárnění“ blkid
budou data skutečně načtena z soubor mezipaměti (obvykle /run/blkid/blkid.tab
), který lze zapisovat pouze u root
, a bude tedy vyžadovat jedno spuštění pod Sudo
, aby se naplnilo aktuálními daty.
#!/bin/bash
# LICENSE: GPL
if [[ $(id -u) -ne 0 ]]; then
if [[ ! -s /run/blkid/blkid.tab ]]; then
# no cache file found when run as regular user
# this will require one run under Sudo to populate cache file
echo -e "Cache file does not exist or is empty.\nPlease give your root password to continue:\n\n"
Sudo blkid >/dev/null
fi
fi
df -P |
sort |
awk 'BEGIN {
fmthdr = "%-12s%-22s%-10s\t%-5s\n"
# since we want to use single quotes for showing label names, we had better
# replace the problematic single quote character by its hex representation, "\x27"
fmtlin_w_qu = "%-12s\x27%-17s\x27\t %-10s\t%4s used\n"
fmtlin_wo_qu = "%-12s%-17s\t %-10s\t%4s used\n"
printf fmthdr, " Device ", "Volume Label", "File System", "Storage usage"
printf fmthdr, "---------", "------------", "-----------", "-------------"
}
/^\/dev\/[sh]/{
lab = "" # CLEAR lab w/every run (very important!)
("blkid -o export "$1" | grep LABEL | cut -f2 -d=") | getline lab
("blkid -o export "$1" | grep TYPE | cut -f2 -d=") | getline fs
if (lab == "") {
lab = "<none>"
fmtlin = fmtlin_wo_qu
}
else
fmtlin = fmtlin_w_qu
printf fmtlin, $1, lab, fs, $5
}'
e2label pro mě nefungoval se štítky souborových systémů UDF. blkid ano;
blkid -s LABEL -o value /dev/sdg1
Používám také výše zmíněné lsblk
, ale shledávám následující možnosti lépe vyhovující:
Sudo lsblk -o name,mountpoint,tran,fstype,label,size
Zjistil jsem, jak dostanu fslabel z fsroot partition jako běžný uživatel. Tato stránka mi pomohla uspět. Nebylo to snadné. Mnoho příkazů pracuje pouze se Sudo, ale/etc/mtab a/dev/disk/by-label jsou čitelné jako běžný uživatel.
Zde je bash kód:
test=`cat /etc/mtab|grep " / "`
test=${test%% *}
test=${test##*/}
test=`ls -l /dev/disk/by-label/|grep $test`
test=${test%% ->*}
test=${test##* }
Velmi snadné:
lsblk -fp
Popis z manuálové stránky:
-f, --fs Output info about filesystems. This option is equivalent to -o NAME,FSTYPE,LABEL,UUID,MOUNTPOINT. The authoritative information about filesystems and raids is provided by the blkid(8) command. -p, --paths Print full device paths.
Na obou následujících distribucích jsem testoval příkaz:
Výsledek:
$ lsblk -fp
NAME FSTYPE LABEL UUID MOUNTPOINT
/dev/nvme0n1
├─/dev/nvme0n1p1 vfat BOOT xxxx-7xxD /boot/efi
├─/dev/nvme0n1p2
├─/dev/nvme0n1p3 ntfs Windows 22xxxxxxxx1222B3001
├─/dev/nvme0n1p4 ntfs Recovery xxxx1222222xxxx1
├─/dev/nvme0n1p5 ext4 xxxxxx-5xx9-4xxb-xxxx-xxxxxxxxxx1 /boot
├─/dev/nvme0n1p6
├─/dev/nvme0n1p7 ext4 xxxxxx-6xxb-4xx6-xxd7-xxxxxxxxxxxx
└─/dev/nvme0n1p8 crypto_LUKS xxxxxx-exx0-415a-xxxx-xxxxxxxxxxxx
└─/dev/mapper/lukslvm LVM2_member xxxxxx-lxxH-Rxxn-xxxx-xxxx1-xxxxxx
├─/dev/mapper/vgubuntu-swap swap xxxxxx-5xx9-4xxb-xxxx-xxxxxxxxxxxx [SWAP]
└─/dev/mapper/vgubuntu-root ext4 xxxxxx-fxxa-4xxd-9e41-xxxxxxxxxxxx /