我有一个基于 x86 的机器,运行 FreeBSD 10.1。我已经将它与 Red hat Linux 和其他操作系统进行了双引导。现在我正在将 FreeBSD (10.1) 上的 UFS 分区“A”迁移到 Linux 上基于 ext2 的分区。我使用分区“B”作为临时存储。
我正在遵循以下程序。
- 在 FreeBSD 中:我将“B”格式化为 ext2,并使用 rsync 将数据从“A”移动到“B”。重新启动盒子。
- Box 是随 Linux 一起出现的。我现在在 Linux 中将“A”格式化为 ext2,将 B 安装为 ext2,并使用 rsync 将数据从“B”移动到“A”
问题:Linux 中的“B”安装多次失败并建议运行 fsck。当我fsck
在非交互模式下运行时,它会失败并建议手动运行。我无法手动运行“fsck”,因为盒子位于远程。其次我担心是否fsck
会导致数据丢失。
查询:
- 为什么 linux 要求我运行 fschk?我做错了什么?
fsck
在分区上运行有多安全?如果文件在操作中被删除,我的盒子将无法干净地出现。- 有什么方法可以记录
fsck
我可以用于调试的所有操作
在FreeBSD上完成的操作:
#format raw partition as ext2
mkfs.ext2 /dev/mfid0s1f
#mount newly formated partition as backup
mkdir -p /backup
mount /dev/mfid0s1f /backup
#move data for UFS partition mounted as 'data' to ext2 partition
rsync -a /data/* /backup
#reboot the box
reboot
在Linux中完成的操作(通过rc.local):
case 1: I try to mount 'backup' without fsck
mkdir -p /backup
mount /dev/sda8 /backup
mount fail with suggestion to run fsck.
case 2: I add non-interective fsck
mkdir -p /backup
e2fsck -p /dev/sda8
fail with : /dev/sda8: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY
答案1
为什么操作系统要求运行
fsck
?
在过去的某个时刻,文件系统没有被干净地卸载。系统需要您运行fsck
来清除不一致的地方。
我做错了什么?我使用 rsync 来移动数据。
从概念上讲,我认为你没有做任何错误,除了你应该运行fsck
(见上文)。如果能在这里看到你的命令就好了rsync
。
运行 fsck 有多安全?如果文件被删除,我的盒子将无法干净地出现
文件系统处于不一致状态。这可能只是文件系统没有标记为干净,但其他方面都很好。在另一个极端,整个文件系统可能会损坏,理论上您可能会丢失所有内容。大多数情况下,fsck
只会清除已删除但尚未从文件系统中删除的文件。
有没有办法记录在 fsck 下完成的所有操作?
您有多种选择。一种是在其内部使用该命令试运行模式(参见man fsck
和man e2fsck
):
fsck -n /dev/mfid0p7
我强烈建议您不要使用自动恢复标志,-p
直到您对它将进行的修复感到满意为止。
答案2
a) 为什么操作系统要求运行 fsck。我做错了什么?
fsck 代表“文件系统一致性检查”。
在大多数系统上,如果检测到某些条件,fsck 就会在引导时运行。通常,这些条件是:
- 文件系统被标记为“脏”——其写入状态与计划写入的数据不一致。
- 文件系统已安装一定次数而未经过检查。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
b) 运行 fsck 安全吗?如果文件被删除,我的机器将无法正常启动。
好吧,这取决于,如果在提示删除错误的 inode 或块时输入 yes,您将丢失数据。这就是为什么使用该-p
选项可能并不理想。
不要在已安装的文件系统上运行 fsck!如果您在当前已挂载的文件系统上运行 fsck,您将(最好的情况)收到一条错误消息,并且(最坏的情况)会损坏文件系统数据。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
c) 有没有办法记录在 fsck 下完成的所有操作?
对于fsck
启动时的检查,您可以检查/var/log/boot.log
Maybe your OS also has a /var/log/fsck
not every Linux fancy has it.