我的问题是,设备可能由挂起的virtualbox
虚拟机挂载。如果是这样,我不想在 VirtualBox 虚拟机下更改设备。最明显的检查是文件系统是否已完全卸载。如果是这样,挂载它应该是安全的。如何在不更改文件系统的情况下测试文件系统是否已完全卸载?
计划是这样做
if cleanly_unmounted /dev/loop0
then mount /dev/loop0 /mnt/tmp
else echo UNCLEANLY MOUNTED, UNWISE TO MOUNT
我以为我可以使用,fsck -n
但即使文件系统当前已挂载,它也不会报告任何错误。
答案1
基质金属蛋白酶- 多重安装保护 - 应该可以解决问题。
您需要在文件系统上启用它:
tune2fs -M mmp <dev>
然后您可以用它e2mmpstatus
来检查它是否已经安装。
注意,在调用 之前,你需要手动调用e2mmpstatus
来检查它是否已挂载mount
。否则,linux 将很乐意将其挂载两次并破坏文件系统。
例子:
> truncate --size 1000000 /tmp/test.img
> mkfs.ext4 /tmp/test.img
> tune2fs -O mmp /tmp/test.img
tune2fs 1.45.5 (07-Jan-2020)
Multiple mount protection has been enabled with update interval 5s.
> mkdir /tmp/mnt
> e2mmpstatus /tmp/test.img; echo $?
e2mmpstatus: it is safe to mount '/tmp/test.img', MMP is clean
0
> mount /tmp/test.img /tmp/mnt
> e2mmpstatus /tmp/test.img; echo $?
e2mmpstatus: MMP: device currently active while trying to open /tmp/test.img
e2mmpstatus: MMP last updated by 'noon' on Tue Jul 20 12:13:25 2021
1