Maszyna wirtualna ma dostęp do urządzenia blokowego /dev/vdb
(blkid). Poniższe komendy tworzą na tym urządzeniu tablice partycji
gpt i dwie partycje podstawowe:
# parted -s /dev/vdb mktable gpt print
# parted -s /dev/vdb mkpart primaty 1 200 print
# parted -s /dev/vdb mkpart primary 200 1000 print
Teraz można na tych partycjach utworzyć system plików Ext4:
# mkfs -t ext4 -m0 /dev/vdb1
# mkfs -t ext4 -m0 /dev/vdb2
i sprawdzić zawartość superbloku każdego z nich (tune2fs -l \dev/vdb1|2).
Zawartość superbloku i informacje o grupach bloków można uzyskać przy
pomocy komendy dumpe2fs /dev/vdb1|2).
Należy także utworzyć w katalogu /mnt dwa podkatalogi (vdb1|2), utworzyć
w nich jakiś plik (touch vdb1/x1 vdb2/x2), a następnie przeanalizować
wyniki komend:
# stat /mnt
# stat /mnt/vda1; stat /mnt/vda1/x1
# stat /mnt/vda2; stat /mnt/vda1/x2
Tak przygotowane partycje mogą zostać zamontowane w katalogach /mnt/vdb1
i /mnt/vdb2, pod warunkiem, że jądro zawiera moduł do obsługi system
plików Ext4. Przy pomocy komendy lsmod można sprawdzić jakie moduły
zostały załadowane i czy wśród nich jest moduł ext4.
# mount /dev/vdb1 /mnt/vdb1/
# mount /dev/vdb2 /mnt/vdb2/
# mount
Teraz należy ponownie przeanalizować wyniki działania komend:
# stat /mnt
# stat /mnt/vda1; stat /mnt/vda1/x1
# stat /mnt/vda2; stat /mnt/vda1/x2
i porównać z wynikami wcześniejszymi.
Zmodyfikuj poprzednie zadanie zakładając na partycji /dev/vda2 system
plików VFAT. Systemu VFAT nie wykorzystuje pojęcia i-węzła. Dlaczego
zatem wynik działania komendy stat /mnt/vsd2/x2 wygląda następująco
File: ‘x2’
Size: 0 Blocks: 0 IO Block: 2048 regular empty file
Device: fd12h/64786d Inode: 3 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-01-20 21:03:58.000000000 +0100
Modify: 2022-01-20 21:03:58.000000000 +0100
Change: 2022-01-20 21:03:58.000000000 +0100
Birth: -
Porównaj działanie komend mount oraz findmnt.
Jakie znaczenie mają parametry Mount count i Maximum mount count (man tune2fs)?
Korzystając z testowego systemu plików (np. /dev/vdb1) nadaj parametrowi Maximum mount count wartość 3.
Przeanalizuj działanie następującej sekwencji komend:
# tune2fs -l /dev/vdb1 | grep -i count
# mount /dev/vdb1 /mnt/vdb1; umount /mnt/vdb1
# fsck /dev/vdb1
# mount /dev/vdb1 /mnt/vdb1; umount /mnt/vdb1
# fsck /dev/vdb1
# tune2fs -l /dev/vdb1 | grep -i count
# mount /dev/vdb1 /mnt/vdb1; umount /mnt/vdb1
# tune2fs -l /dev/vdb1 | grep -i count
# fsck /dev/vdb1
# tune2fs -l /dev/vdb1 | grep -i count
Przygotuj testowe systemy plików ext4 na urządzeniach /dev/vdb1 i /dev/vdb2 oraz dodaj do /etc/fstab wiersz:
/dev/vdb1 /mnt/vdb1 ext4 defaults 0 0
Jakie są domyślne opcje montowania? Zob. man mount
Sprawdź działanie opcji (no)exec:
# mount /mnt/vdb1; mount | grep vdb1
# mount -o remount,noexec /mnt/vdb1; mount | grep vdb1
# cp /usr/bin/ping /mnt/vdb1
# /mnt/vdb1/ping localhost
# mount -o remount,exec /mnt/vdb1
# /mnt/vdb1/ping localhost
Sprawdź działanie opcji (no)dev:
# mkfs.vfat /dev/vdb2
# mkdir /mnt/vdb1/dev; cp -aL /dev/vdb2 /mnt/vdb1/dev
# mount /mnt/vdb1/dev/vdb2 /mnt/vdb2
# df -T; umount /mnt/vdb2
# mount -o remount,nodev /mnt/vdb1
# mount /mnt/vdb1/dev/vdb2 /mnt/vdb2
Sprawdź działanie opcji (no)suid:
# mount /mnt/vdb1; mount | grep vdb1
# mount -o remount,nosuid /mnt/vdb1; mount | grep vdb1
# cp /usr/bin/passwd /mnt/vdb1
# su - labul
# /mnt/vdb1/passwd
Sprawdź działanie opcji (a)sync:
# mount /mnt/vdb1; mount | grep vdb1
# time dd if=/dev/zero of=/mnt/vdb1 bs=1M count=500
# mount -o remount,sync /mnt/vdb1;
# time dd if=/dev/zero of=zero bs=1M count=500
W czasach, kiedy nie było narzędzi do zarządzania urządzeniami w przestrzeni użytkownika (zob. następne zadanie), trzeba było używać innych metod. Jako superużytkownik utwórz na urządzeniu /dev/vdb1 system plików ext4 i utwórz w nim katalog labul tak, żeby labul był jego właścicielem. Następnie umieść w /etc/fstab następujący wpis:
/dev/vdb1 /mnt/vdb1 ext4 rw,user 0 0
Czy użytkownik labul może zamontować ten zasób? Czy może w podkatalogu labul umieszczać pliki?
Co się dzieje jeśli opcje “rw,user” zamienić na “defaults”?
Montowanie przy pomocy komendy mount wymaga uprawnień superużytkownika. Komenda
udisksctl (man udisksctl) pozwala zwykłemu, nieuprzywilejowanemu użytkownikowi
na przeprowadzenie operacji montowania. Jako użytkownik labul wykonaj komendy:
# udisksctl mount -b /dev/vdb1
# df -Ph
Gdzie zasób dyskowy został zamontowany? Czy użytkownik labul może tworzyć i modyfikować pliki w podkatalogu labul?
Co należy zrobić, żeby użytkownik labul nie musiał podawać swojego hasła przy każdej próbie montowania?
Jako użytkownik root wykonaj komendy:
# cd /etc/polkit-1/rules.d
# wget http://jkob.fizyka.umk.pl/labul/scripts/50-udisks.rules
# systemctl restart polkit
Jako użytkownik labul wykonaj komendę udisksctl mount -b /dev/vdb1.
Uwaga! Przed przystąpieniem do tego ćwiczenia zakomentuj w pliku /etc/fstab wpis
dotyczący montowania urządzenia /dev/vdb1. Po zakończeniu ćwiczenia odkomentuj ten wpis
i – jako użytkownik labul – wykonaj montowanie zasobu przy pomocy komendy
udisksctl. Czy w obu przypadkach zastosowanie komendy udisksctl daje ten sam
efekt?
Chcąc udostępnić jakis system plików w kilku odrębnych punktach montowania można go
oddzielnie w tych miejscach montować. Lepiej posłużyć sie opcją
--bind. Przeanalizuj konsekwencje zastosowania nastepującej sekwencji komend:
# mkdir /vdb1 /mnt/root
# mount /dev/vdb1 /vdb1
# mount --bind / /mnt/root
# ls /mnt/root/etc
# ls /mnt/root/dev
# ls /mnt/root/vdb1
# mount --bind /dev /mnt/root/dev/
# mount --bind /vdb1 /mnt/root/vdb1
# chroot /mnt/root
# ls /dev; ls /vdb1
Przeanalizuj działanie urządzeń specjalnych /dev/loop0, /dev/loop1, …
Utwórz dwie partycje /dev/vdb[12] po 200 MB każda i utwórz na nich system plików ext4. Na partycję /dev/vdb1 skopuj /bin, a następnie ją zarchiwizuj przy pomocy komendy dd.
Niech partycja /dev/vdb2 będzie kopią partycji /dev/vdb1 utworzoną przy pomocy jej obrazu vdb1.img. Porównaj zawartość obu partycji.
W jaki sposób sprawdzić zawartość obrazu partycji bez kopiowania go na istniejącą partycję?
Pobierz dsl.iso i sprawdzić zawartość katalogu boot
(plik isolinux.cfg).
Zapoznaj się z komendą sshfs, która wykorzystując ssh i system plików w przestrzeni
użytkownika FUSE (Filesystem in Userspace) pozwala na zamontowanie katalogu domowego ze
zdalnego serwera. Zob. skrypt sshfsctl.