Wygląda na to, że mount -o loop
zmienia zamontowany plik obrazu. Pobrałem plik obrazu ISO i sprawdziłem sumę kontrolną SHA-1. Następnie zamontowałem ten plik ISO i suma kontrolna uległa zmianie. Oto dokładne kroki, które wykonałem, skopiuj i wklej z mojej konsoli CentOS 7 x64 (zauważ, że plik ISO jest tylko do odczytu):
[mbartnicki@89-78-33-81 Downloads]$ ls -lh
total 3.1G
-r--r--r--. 1 mbartnicki mbartnicki 3.1G Mar 31 18:28 X17-58997.iso
[mbartnicki@89-78-33-81 Downloads]$ sha1sum X17-58997.iso
6c9058389c1e2e5122b7c933275f963edf1c07b9 X17-58997.iso
[mbartnicki@89-78-33-81 Downloads]$ sudo mount -o loop X17-58997.iso /mnt/iso/
mount: /dev/loop0 is write-protected, mounting read-only
[mbartnicki@89-78-33-81 Downloads]$ sha1sum X17-58997.iso
994944df320e9e03c032263d7b9e36157a0a587c X17-58997.iso
Byłem tak zaskoczony, że powtórzyłem powyższe kroki na innym komputerze (Ubuntu 14.04 x64), aby uzyskać ten sam wynik: suma kontrolna pliku zmieniła się później mount -o loop
. Odmontowanie obrazu ISO nie przywraca sumy kontrolnej do pierwotnej wartości; zmiana pliku jest trwała. Co więcej, przy następnym montażu ponownie zmień sumę kontrolną na nową wartość. Jak można to wyjaśnić?
PS
Montowanie jawnie tylko do odczytu poprzez dodanie ro
opcji montowania zapobiega zmianie pliku, więc jeśli użyję:
sudo mount -o ro,loop X17-58997.iso /mnt/iso
wtedy wszystko jest w porządku, a plik obrazu ISO pozostaje niezmieniony po zamontowaniu. Niewłaściwe zachowanie występuje tylko wtedy, gdy ro
nie określono opcji, nawet jeśli plik obrazu ISO jest tylko do odczytu na poziomie systemu plików. Wypróbowałem trzy różne obrazy ISO: instalacyjny dysk DVD z systemem Windows 7 (oficjalny), SystemRescueCD (mały ratunkowy Linux) i ręcznie wykonany ISO stworzony przez genisoimage
narzędzie.
Sprawdziłem wszystkie pliki ISO za pomocą file
narzędzia i file
powiedziałem, że wszystkie są danymi systemu plików CD-ROM ISO 9660 . Pliki w obrazach ISO nie są zmieniane - sprawdziłem też - wygląda na to, że scenariusz błędnego montażu dodaje metadane lub po prostu śmieci.
genisoimage -o empty.iso emptydir
?
iso
? Możesz użyć mknod -m 660 /dev/loop1 b 7 1
także po uruchomieniuchmod 660 /dev/loop*