Zarządzanie systemem plików obejmuje takie operacje jak: tworzenie (lub formatowanie), ręczne i automatyczne montowanie/odmontowanie, nadawanie etykiety, przeglądanie, rozszerzanie, zmniejszanie, modyfikowanie atrybutów, usuwanie systemu plików. Poniższe tabele przedstawiają komendy związane z zarządzaniem różnymi systemami plików w Linuxie.
Zadanie | ext3/4 | XFS |
Utworzenie systemu plików | mkfs.ext3 / mkfs.ext4 lub mke2fs –t ext3 / mke2fs –t ext4 |
mkfs.xfs |
Sprawdzenie systemu plików | e2fsck |
xfs_repair |
Zmiana rozmiaru systemu plików | resize2fs |
xfs_grows |
Zapisanie obrazu systemu plików | e2image |
xfs_metadump i xfs_mdrestore |
Nadanie etykiety lub dostrajanie systemu plików | tune2fs |
xfs_admin |
Kopia zapasowa systemu plików | dump i restore |
xfsdump i xfsrestore |
Informacje o systemie plików | dumpe2fs |
xfs_info |
Komenda | Opis |
VFAT | |
mkfs.vfat |
Tworzy system plików vfat. Odpowiednik mkfs -t vfat. |
Komendy wspólne dla wszystkich systemów plików | |
blkid |
Wyświetla atrybuty urządzenia blokowego wraz z UUID. |
df |
Wyświetla aktualne użycie systemu plików. |
du |
Oblicza aktualne użycie katalogów na dysku. |
findmnt |
Listuje w formie drzewa wszystkie zamontowane systemy plików. |
fuser |
Listuje i zabija procesy korzystając z systemu plików. |
mount |
Wyświetla aktualnie zamontowane systemy plików. Montuje system plików. |
umount |
Odmontowuje system plików. |
Montowanie i odmontowywanie systemów plików.
Do podłączania systemu plików do pożądanego miejsca w drzewie katalogów (katalogu – punktu montowania) służy komenda mount. Komenda ta dodaje pozycje do pliku /etc/mtab i instruuje jądro aby dodało wpis do pliku /proc/mounts jak tylko system plików zostanie podmontowany. Punkt montowania powinien być pusty w momencie montowania, w przeciwnym razie jego zawartość zostanie przesłonięta zawartością podmontowanego systemu plików.
# mount [-t typ][-o opcja] urządzenie katalog
Opcja | Opis |
async (sync) |
Pozwala systemowi plików pracować asynchronicznie (synchronicznie). Nie działa z XFS. |
acl (noacl) |
Włącza (wyłącza) wsparcie dla ACL. |
atime (noatime) |
Aktualizuje (nieaktualizuje) czas dostępu (inode accces time) do systemu plików. |
auto (noauto) |
Montuje (nie montuje) system plików gdy podana jest opcja -a. |
defaults |
Akceptuje wszystkie domyślne wartości (async, auto, dev, exec, nouser, rw i suid). |
dev (nodev) |
Interprets (does not interpret) the device files on the file system. |
exec (noexec) |
Zezwala (nie zezwala) na wykonywanie pliku binarnego. |
loop |
Montuje obraz ISO jako urządzenie loop. |
owner |
Pozwala właścicielowi systemu plików na zamontowanie tego systemu. |
_netdev |
Używane przez system plików, który wymaga łączności sieciowej, np. NFS, CIFS, iSCSI. |
remount |
Montuje ponownie już zamontowany system plików w celu włączenia lub wyłączenia jakiejś opcji. |
ro (rw) |
Montuje system plików w trybie tylko do odczytu (odczytu/zapisu). |
suid (nosuid) |
Włącza (wyłącza) możliwość uruchamiania programów setuid i setgid. |
user (nouser) |
Pozwala (nie pozwala) zwykłemu użytkownikowi na montowanie systemu plików. |
users |
Pozwala wszystkim użytkownikom na montowanie i odmontowanie systemu plików. |
Komendą przeciwną do mount jest umount. Polecenie to odmontowuje wskazany system plików, usuwa korespondujący wpis z pliku /etc/mtab i intruuje kernel do usuunięcia wpisu z pliku /proc/mounts.
# umount urządzenie katalog
Ustalanie UUID systemu plików.
System plików utworzony na standardowej partycji lub woluminie logicznym posiada UUID (Universally Unique IDentifier) przypisany mu w momencie utworzenia. Identyfikator UUID jest zawsze stały, nawet po reboocie systemu. Linux w momencie startu systemu próbuje montować wszystkie systemy plików dopisane do pliku /etc/fstab. Każdy system plików ma powiązany plik urządzenia (np. /dev/sda1) i identyfikator UUID a już etykiety mieć nie musi. Linux sprawdza obecność w /etc/fstab pliku urządzenia, identyfikatora UUID lub etykiety i na tej podstawie próbuje podmontować system plików.
Przykład pliku /etc/fstab:
UUID=7deca775-6f01-4e3e-a03d-3390d0fb01b7 / xfs defaults 0 0
/dev/mapper/centos_centos-swap swap swap defaults 0 0
Ustalanie UUID:
# xfs_admin -u /dev/vda1
UUID = 362e0c12-a644-4611-b4ce-656c72750483
# blkid /dev/vda1
/dev/vda1: UUID="362e0c12-a644-4611-b4ce-656c72750483" TYPE="xfs"
# grep boot /etc/fstab
UUID=362e0c12-a644-4611-b4ce-656c72750483 /boot xfs defaults 1 2
Nadawanie etykiety systemowi plików.
Aby powiązać system plików z unikalną nazwą można nadać mu etykietę. Takiej etykiety można używać w pliku /etc/fstab zamiast identyfikatora UUID.
Sprawdzanie etykiety urządzenia /dev/vda1:
# xfs_admin –l /dev/vda1
label = ""
Nadawanie etykiety:
# umount /boot
# xfs_admin –L bootfs /dev/vda1
writing all SBs
new label = "bootfs"
# mount /boot
Teraz w /etc/fstab zamiast UUID możemy wpisać LABEL=bootfs.
Dla systemu plików ext do nadania etykiety możemy skorzystać z komendy e2label i tune2fs -l do weryfikacji.
Automatyczne montowanie systemu plików po reboocie systemu.
Systemy plików prawidłowo dodane do pliku /etc/fstab (file system table) są montowane automatycznie po restarcie systemu.
Przykład pliku /etc/fstab:
UUID=7deca775-6f01-4e3e-a03d-3390d0fb01b7 / xfs defaults 0 0
/dev/mapper/centos_centos-swap swap swap defaults 0 0
Pierwsza kolumna pliku definiuje fizyczne lub wirtualne urządzenie, na którym rezyduje system plików. Może bbyć wpisana tutaj nazwa urządzenia (np. /dev/sdb1), identyfikator UUID lub etykieta systemu plików.
Druga kolumna pliku definiuje punkt montowania systemu plików. Dla partycji wymiany (swap) wpisujemy none lub swap.
Trzecia kolumna pliku to system plików taki jak np. ext3, ext4, xfs, vfat lub iso9660. Dla partycji wymiany wpisujemy swap.
Czwarta kolumna pliku definiuje opcje z jakimi ma być podmontowany system plików. Niektóre z tych opcji zostały opisane w tabeli na początku artykułu.
Piąta kolumna pliku używana jest przez narzędzie dump do określenia czy ma być zrobiony zrzut danego systemu plików. Wartość 0 (lub brak wpisu w tej kolumnie) wyłącza sprawdzanie.
Ostatnia kolumna pliku określa kolejność, w jakiej uruchomić narzędzie e2fsck do sprawdzenia systemu plików przy starcie systemu. Domyślnie 0 jest używane przez systemy plików pamięciowe, zdalne lub wymienne. 1 jest używane dla katalogu głównego /. 2 dla katalogu /boot i innych fizycznych systemów plików. 0 można także użyć przy katalogu / i /boot aby nie sprawdzać spójności tych systemów plików przy uruchamianiu systemu.
Sprawdzanie zajętości systemu plików.
Na maszynach uruchomionych produkcyjnie bardzo często zachodzi potrzeba sprawdzenia zajętości systemu plików celem określenia czy system plików nie powinien być rozszerzony lub oczyszczony z niepotrzebnych danych. Do tego celu używamy polecenia df (disk free).
# df
System plików 1K-bl użyte dostępne %uż. zamont. na
/dev/xvda1 313371136 5047112 308324024 2% /
devtmpfs 921480 0 921480 0% /dev
tmpfs 937072 56 937016 1% /dev/shm
tmpfs 937072 712 936360 1% /run
tmpfs 937072 0 937072 0% /sys/fs/cgroup
tmpfs 187416 0 187416 0% /run/user/0
Polecenie może być użyte również z opcją – h, która wyświetla zużycie dysku w KB, MB i GB lub TB.
# df -h
System plików rozm. użyte dost. %uż. zamont. na
/dev/xvda1 299G 4,9G 295G 2% /
devtmpfs 900M 0 900M 0% /dev
tmpfs 916M 56K 916M 1% /dev/shm
tmpfs 916M 712K 915M 1% /run
tmpfs 916M 0 916M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/0
Ćwiczenie 1. Tworzenie i montowanie systemów plików extended.
Ustawiamy etykietę tablicy partycji vdb na msdos (MBR) korzystając z parted:
# parted /dev/vdb mklabel msdos
# parted /dev/vdb print | grep msdos
Partition Table: msdos
Tworzymy partycję podstawową 200MB na dysku vdb:
# parted /dev/vdb mkpart primary ext3 1 201m
# parted /dev/vdb print
1 1049kB 201MB 200MB ext3 primary
Formatujemy partycję jako ext3 korzystając z komendy mke2fs:
# mke2fs –t ext3 /dev/vdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
48960 inodes, 195584 blocks
9779 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
24 block groups
8192 blocks per group, 8192 fragments per group
2040 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Inicjalizacja dysku vdd do użytku dla LVM jako fizycznego woluminu:
# pvcreate /dev/vdd –v
Set up physical volume for "/dev/vdd" with 4194304 available sectors
Zeroing start of device /dev/vdd
Writing physical volume data to disk "/dev/vdd"
Physical volume "/dev/vdd" successfully created
Utworzenie grupy woluminów vg10 komendą vgcreate i dodanie woluminu fizycznego vdd do tej grupy:
# vgcreate –v vg10 /dev/vdd
Adding physical volume '/dev/vdd' to volume group 'vg10'
Archiving volume group "vg10" metadata (seqno 0).
Creating volume group backup "/etc/lvm/backup/vg10" (seqno 1).
Volume group "vg10" successfully created
Utworzenie woluminu logicznego lvolext4 o rozmiarze (-L) 1.5GB i nazwie (-n) lvolext4 w grupie woluminów vg10:
# lvcreate –L 1.5g –n lvolext4 vg10 –v
Setting logging type to disk
Finding volume group "vg10"
Archiving volume group "vg10" metadata (seqno 3).
Creating logical volume lvolext4
Creating volume group backup "/etc/lvm/backup/vg10" (seqno 4).
Activating logical volume "lvolext4".
activation/volume_list configuration setting not defined: Checking only host tags for vg10/lvolext4
Creating vg10-lvolext4
Loading vg10-lvolext4 table (253:3)
Resuming vg10-lvolext4 (253:3)
Wiping known signatures on logical volume "vg10/lvolext4"
Initializing 4.00 KiB of logical volume "vg10/lvolext4" with value 0.
Creating volume group backup "/etc/lvm/backup/vg10" (seqno 4).
Logical volume "lvolext4" created
Formatujemy logiczny wolumin lvolext4 na ext4 korzystając z mke2fs:
# mke2fs –t ext4 /dev/vg10/lvolext4
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
98304 inodes, 393216 blocks
19660 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=402653184
12 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
Tworzymy punkty montowania /mntext3 and /mntext4:
# mkdir –v /mntext3 /mntext4
mkdir: created directory ‘/mntext3’
mkdir: created directory ‘/mntext4’
Montujemy /dev/vdb1 do /mntext3 oraz /dev/vg10/lvolext4 do /mntext4:
# mount /dev/vdb1 /mntext3
# mount /dev/vg10/lvolext4 /mntext4
Potwierdzamy zamontowanie dysków:
# df -h
Określamy UUID woluminu /dev/vdb1 komendą tune2fs:
# tune2fs –l /dev/vdb1 | grep UUID
Filesystem UUID: c8dd716e-b9ba-465d-859b-d7115a1ea289
Otwieramy plik /etc/fstab i dodajemy wpisy dla dwóch systemów plików:
echo "UUID=c8dd716e-b9ba-465d-859b-d7115a1ea289 /mntext3 ext3 defaults 1 2" >> /etc/fstab
echo "/dev/vg10/lvolext4 /mntext4 ext4 defaults 1 2" >> /etc/fstab
Odmontowywujemy oba systemy plików:
# umount /mntext3 /mntext4
Rebootujemy system:
# reboot
Sprawdzamy czy po reboocie oba systemy plików są podmontowane:
# mount | grep mntext
# df -h | grep mntext
Ćwiczenie 2. Zmiana rozmiaru systemu plików extended.
Tworzymy podstawową partycję (vdb2) na dysku vdb o rozmiarze 500MB.
# parted /dev/vdb mkpart primary 202m 703m
# parted /dev/vdb print | grep 703
Utworzenie fizycznego woluminu na partycji vdb2:
# pvcreate /dev/vdb2
Physical volume "/dev/vdb2" successfully created
Rozszerzenie grupy woluminów vg10 komendą vgextend i dodanie fizycznego woluminu do tej grupy:
# vgextend vg10 /dev/vdb2
Volume group "vg10" successfully extended
Rozszerzenie logicznego woluminu lvolext4 z 1.5GB do 2GB ramach grupy woluminów vg10. Opcja -r rozszerza także system plików na logicznym woluminie:
# lvresize –r –L 2g /dev/vg10/lvolext4
Extending logical volume lvolext4 to 2.00 GiB
Logical volume lvolext4 successfully resized
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/vg10-lvolext4 is mounted on /mntext4; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/vg10-lvolext4 is now 524288 blocks long.
Potwierdzamy podmontowanie dysku i rozmiar dwóch logicznych woluminów:
# lvs | grep lvolext4
# df -h | grep mntext4
Zmniejszamy rozmiar systemu plików o 900MB (do 1.1GB) przy użyciu komendy lvresize. Będziemy zmuszeni do odmontowania systemu plików.
# lvresize –r –L 1.1g /dev/vg10/lvolext4
Rounding size to boundary between physical extents: 1.10 GiB
Do you want to unmount "/mntext4"? [Y|n] y
fsck from util-linux 2.23.2
/dev/mapper/vg10-lvolext4: 11/131072 files (9.1% non-contiguous), 17580/524288 blocks
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/vg10-lvolext4 to 288768 (4k) blocks.
The filesystem on /dev/mapper/vg10-lvolext4 is now 288768 blocks long.
Reducing logical volume lvolext4 to 1.10 GiB
Logical volume lvolext4 successfully resized
Potwierdzamy nowy rozmiar logicznego woluminu i systemu plików:
# lvs | grep lvolext4
# df -h | grep mntext4
Ćwiczenie 3. Tworzenie, montowanie i rozszerzanie rozmiaru systemu plików XFS.
Inficjalizacja partycji do użycia jako fizyczny wolumin i dodanie jej do grupy woluminów vg10. Opcja -v dla pokazywania wiekszej ilości detali:
# pvcreate /dev/vdc1
Physical volume "/dev/vdc1" successfully created
# vgextend vg10 /dev/vdc1
Volume group "vg10" successfully extended
Utworzenie logicznego woluminu o nazwie (-n) lvolxfs i rozmiarze (-L) 188MB przy użyciu komendy lvcreate.
# lvcreate –L 188m –n lvolxfs vg10 /dev/vdc1
Logical volume "lvolxfs" created
Formatowanie logicznego woluminu lvolxfs na system plików xfs:
# mkfs.xfs /dev/vg10/lvolxfs
Utworzenie punku montowania /mntxfs:
# mkdir /mntxfs
Zamontowanie /dev/vg10/lvolxfs w katalogu /mntxfs
# mount /dev/vg10/lvolxfs /mntxfs
Potwierdzenie faktu zamontowania woluminu i sprawdzenie rozmiaru:
# df -h | grep mntext
Dodanie wpisu do pliku /etc/fstab file dla lvolxfs:
echo "/dev/vg10/lvolxfs /mntxfs xfs defaults 1 2" >> /etc/fstab
Zwiększenie rozmiaru lvolxfs o 112MB (do 300MB) przy wykorzystaniu dostępnej przestrzeni dyskowej:
# lvresize –r –L 300m /dev/vg10/lvolxfs
Extending logical volume lvolxfs to 300.00 MiB
Logical volume lvolxfs successfully resized
…… . .
Sprawdź logiczny wolumin komendą lvs.
# lvs | grep lvolxfs
# lvdisplay /dev/vg10/lvolxfs
Rebootujemy system.
# reboot
Po reboocie systemu sprawdzamy czy dyski zostały podmontowane.
# mount | grep mntxfs
# df -h | grep mntxfs
Wyświetlamy informacje o systemie plików XFS korzystając z komendy xfs_info:
# xfs_info /mntxfs
Ćwiczenie 4. Tworzymy i montujemy system plików VFAT.
Oznaczamy dysk vde jako msdos (MBR):
# parted /dev/vde mklabel msdos
# parted /dev/vde print | grep –i partition
Partition Table: msdos
Tworzymy podstawową partycję 400MB na dysku vde komendą parted i potwierdzamy:
# parted /dev/vde mkpart primary fat32 1 401m
# parted /dev/vde print
Formatujemy partycję na system plików vfat:
# mkfs.vfat /dev/vde1
mkfs.fat 3.0.20 (12 Jun 2013)
Tworzymy punkt montowania /mntvfat:
# mkdir /mntvfat
Montujemy /dev/vde1 w punkcie /mntvfat:
# mount /dev/vde1 /mntvfat
Sprawdzamy czy dysk vde1 jest zamontowani i weryfikujemy jego rozmiar:
# df -h | grep mntext
Określamy UUID dysku /dev/vde1 komendą blkid:
# blkid /dev/vde1
/dev/vde1: SEC_TYPE="msdos" UUID="4741-2068" TYPE="vfat"
Dodanie wpisu do pliku /etc/fstab file dla tego dysku:
echo "UUID=4741-2068 /mntvfat vfat defaults 1 2" >> /etc/fstab
Reboot systemu:
# reboot
Sprawdzenie czy po reboocie wszystkie dyski są podmontowane:
# df -h
Ćwiczenie 5. Tworzenie, montowanie, odmontowywanie i usuwanie systemów plików.
Tworzymy jako drugą na dysku vdc partycję primary o rozmiarze 100MB.
# parted /dev/vdc mkpart primary 202 303m
Na dysku vde też tworzymy drugą partycję primary o rozmiarze 100MB.
# parted /dev/vde mkpart primary 402 503m
Formatujemy partycję vdc2 na system plików xfs:
# mkfs.xfs /dev/vdc2
Inicjalizujemy partycję vde2 pod LVM komendą pvcreate:
# pvcreate /dev/vde2
Tworzymy grupę woluminów vg20 i dodajemy fizyczny wolumin vde2 do grupy korzystając z komendy vgcreate:
# vgcreate vg20 /dev/vde2
Tworzymy logiczny wolumin lvolext4rem vg20 korzystając z komendy lvcreate:
# lvcreate –L 96m –n lvolext4rem vg20
Formatujemy logiczny wolumin lvolext4rem na system plików ext4:
# mkfs.ext4 /dev/vg20/lvolext4rem
Tworzymy punkty montowania: /mntxfsrem i /mntext4rem:
# mkdir /mntxfsrem /mntext4rem
Systemowi plikow xfs na dysku /dev/vdc2 nadajemy etykietę mntxfsrem:
# xfs_admin –L mntxfsrem /dev/vdc2
Montujemy dysk /dev/vdc2 w punkcie /mntxfsrem korzystając z jego etykiety i dysk /dev/vg20/lvolext4rem punkcie /mntext4rem:
# mount LABEL=mntxfsrem /mntxfsrem
# mount /dev/vg20/lvolext4rem /mntext4rem
Sprawdzamy czy dyski zostały zamontowane
# df –h | grep rem
Dodajemy wpisy do pliku /etc/fstab dla obu systemów plików:
echo "LABEL=mntxfsrem /mntxfsrem xfs defaults 1 2" >> /etc/fstab
echo "/dev/vg20/lvolext4rem /mntext4rem ext4 defaults 1 2" >> /etc/fstab
Rebootujemy systemy
# reboot
Sprawdzamy po reboociee czy dyski zostały podmontowane:
# df –h
Zmieniamy katalog na /mntxfsrem i próbujemy odmontować urządzenie do niego zamontowane::
# cd /mntxfsrem
# umount /mntxfsrem
umount: /mntxfsrem: target is busy.
Określamy komendą fuser (opcje -c dla PID i -u użytkownika), który użytkownik i proces korzysta z tego katalogu
# fuser –cu /mntxfsrem
/mntxfsrem: 2599c(root)
Wychodzimy z katalogu /mntxfsrem i odpalamy fuser ponownie:
# cd
# fuser –cu /mntxfsrem
Teraz nie powinno być problemu z odmontowaniem tego systemu pliku. Można także odmontować /mntext4rem:
# umount /mntxfsrem /mntext4rem
Usuwamy partycję vdc korzystając z parted:
# parted /dev/vdc rm 2
Usuwamy logiczny wolumin lvolext4rem i grupę woluminów vg20:
# lvremove –f /dev/vg20/lvolext4rem
# vgremove vg20
Usuwamy punkty montowania:
# rmdir /mntxfsrem /mntext4rem
Usuwamy także w dowolnym edytorze odpowiednie wpisy w pliku /etc/fstab.
Rebootujemy system.
# reboot
Weryfikujemy czy na pewno te dwa systemy plików są odmontowane:
# findmnt | egrep ‘xfsrem|ext4rem’