你的Linux为何经常无法挂载ntfs——ntfs脏位

大多数linux用户在挂载NTFS文件系统的硬盘时应该都遇到过以下报错吧

Error mounting /dev/[device] at [media-floder]: wrong fs type, bad option, bad superblock on /dev/[device] , missing codepage or helper program, or other error

神奇的是,将硬盘插入Windows却可以正常操作。这通常情况下并不意味你的硬盘损坏,仅仅是因为NTFS的脏位机制。

#什么是脏位

脏位(Dirty Bit, a.k.a modified bit)是一个与计算机存储块关联的位(bit),用于指示相应的块是否已被修改。当处理器写入硬盘上某块时,脏位会被设置。该位表示其关联的块已被修改,但尚未保存到硬盘中。当需要替换块时,会检查其对应的脏位,以确定是否需要在替换之前将该内存块写回辅助内存,或者是否可以直接将其移除。CPU缓存和操作系统的页面替换算法都会用到脏位。

打个比方。

我曾经使用过一款在线记事本,这款记事本有多个页面地址,用户只要知道页面地址就可以自由访问并修改该页面上的内容。于是有人便突发奇想,在某个页面上建立了个聊天室。

聊天室很受欢迎,用户迅速增加。可这个时候问题来了,以前两三个人聊天时还可能时时刷新页面观察对方是否编辑完毕,而现在用户骤增,并不是所有人都有心去观察是否有人编辑。有时候刚输完消息,一刷新,辛辛苦苦码的字瞬间化为乌有,被别人的消息覆盖。

如何解决这个问题呢?建立者想到,可以在编辑前在顶部加一段文字“该页面正在编辑”,这样便可有效减少同时编辑了。

chatchatting

现实中,也许人会经常忽略这条消息,也许人会同时编辑页面增加提示消息,但是在死板而速度极快的计算机上,这却是一个解决同时写入的方案。这就是脏位的原理,同样运用于数据库等领域。因为计算机处理器速度要远快于硬盘和内存存储速度,为了配合处理器,人类设计了缓存。来不及写入的数据会先存入缓存再存入硬盘,这样便提高了硬盘读写效率。

通常情况下脏位无法消除出现在复制完文件后立即拔出设备/关机,缓存内的数据也许已经写入硬盘,但是脏位未能修改。这个时候,系统会认为硬盘正在写入,因此不允许挂载。

#解决方案

可移动设备先弹出再拔出即可大幅减少挂载失败出现概率。

安装ntfs-3g

sudo pacman -S ntfs-3g # ArchLinux
sudo apt install ntfs-3g # Debian系

运行命令清除脏位

sudo ntfsfix -d /dev/[device]

重新挂载。

标签: Linux, Windows

许可协议

本文作者 , 采用 CC-BY-SA-4.0 许可协议,转载请注明出处。

添加新评论