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
.