我正在编写一个自动脚本来删除逻辑卷,但我不能 100% 确定如何执行此操作。看起来应该使用-f
标志 to lvremove
,但文档似乎太草率,让我对此感到不舒服:
-f|--强制...
推翻各种检查、确认和保护。请务必谨慎使用。
那些“各种检查、确认和保护”是什么?对我来说,除了确认删除卷之外,我似乎还回避了其他事情。
答案1
我认为您最大的风险是删除仍在使用的卷。即 ifdmsetup info
显示非零Open count
。
# dmsetup info SSD-root | grep Open
Open count: 1
但这种情况下lvremove
会直接拒绝操作。
# lvremove SSD/root
Logical volume SSD/root contains a filesystem in use.
即使--force
它仍然拒绝删除它(不要在家尝试这个)。
# lvremove --force --yes --verbose SSD/root
Device dm-33 (253:33) appears to be mounted on /.
Logical volume SSD/root contains a filesystem in use.
如果没有安装,这甚至可以工作,否则只是在使用时。
# lvcreate -n test -L100M SSD
# losetup --find --show /dev/SSD/test
# time lvremove SSD/test
Logical volume SSD/test is in use.
real 0m4.816s
user 0m0.008s
sys 0m0.005s
实际上,这非常慢(此 lvremove 调用需要 5 秒!),因为它到处寻找挂载点,但没有找到,并且不断重新检查打开计数。所以这就像“嗯,这没有安装,所以为什么仍然打开”。
因此,对于常规卷,我认为在这里使用相当安全--force
;它不会强制执行实际上危险的情况。联机帮助页甚至在示例部分建议使用武力。但是,我还没有测试快照、缓存和其他特殊卷的情况会发生什么。
答案2
的手册页lvremove
还提供了--yes
,其中指出
不要以交互方式提示确认,但始终假设答案是肯定的。
这应该允许您避免使用--force
(及其所有未指定的检查和平衡),同时仍然能够以编程方式删除卷。
(我知道我没有解决--force
删除的保护问题。我提供了一种替代方案,我相信它可以满足您的基本要求。如果您确实想了解,则不必觉得您必须接受这个答案--force
。)