parted
的命令默认情况下不会resizepart
修改或删除分区上的现有文件吗?此外,它永远不会修改或删除分区上的现有文件(即使通过某些选项)?
类似的问题resize2fs
?
谢谢。
答案1
当收缩文件系统时,resize2fs
首先检查文件系统中要被删除的部分是否空闲。如果没有,它可以尝试将这些文件移出将被剪切的区域(如果有空间的话)。如果无法完成此操作,它将停止并报告错误,而不收缩文件系统。
resizepart
根本不关心文件系统。它只是更改分区表以指定分区现在结束的新位置。它不会覆盖该位置或附近的任何内容。修改分区表后,它会向内核发出分区表已更改的信号。内核将读取新表并应用它(如果可能)。
但对于文件系统驱动程序来说,分区的末端将是一堵硬墙。如果文件系统没有在分区之前收缩,或者分区意外地比分区收缩得更多,则文件系统的一部分现在将与其余部分切断。
文件系统将假设截止空间仍然可用,直到它实际尝试使用它。此时,内核中负责将任何分区相关块号映射到实际整个磁盘块号的部分将向文件系统驱动程序返回错误,因为文件系统试图访问超出其分区末尾的内容。文件系统驱动程序通常会降至只读模式,因为此类错误往往表明文件系统可能已损坏。此时,系统管理员通常会介入。
此时,如果系统管理员意识到分区调整大小操作已经切断了部分文件系统,并撤消分区调整大小操作,则可以再次通过分区设备完全访问文件系统,并且一切可能仍然正常:可能需要fsck
清除错误标志,但文件仍然存在。再次挂载文件系统后,因分区调整大小操作而被平分的文件将再次完全可访问。
但是,如果系统管理员只是对处于收缩状态的分区运行文件系统检查,文件系统检查器将发现有些文件似乎继续超出分区末尾,并对自己说:“让我们截肢”。由于它把分区大小作为确定的事实,因此它别无选择,只能截断或删除似乎超出分区末尾的文件。这就是实际损坏发生的地方。文件系统元数据还需要进行一些调整,以从“书籍”中删除超出分区末尾的空间。
文件系统检查程序完成后,文件的截断部分仍然存在于物理磁盘上,超出了分区的新末尾,没有变化......但是文件仍在文件系统内的部分现在被截断为树桩。