教程

ntfs硬盘无损转Ext4——记一次骚操作

前年买了一块Wd Elements 10T便携移动硬盘,由于当时是买来插Windows上,切该硬盘出场格式是NTFS,自然直接插上就能用了。但是最近我把它插到树莓派(Raspbian)上时,每次读取写入的速度都特别慢,更有甚者,连qBittorrent直接罢工,无法写入到硬盘。后来htop查看进程才知道有个ntfs-3g的进程,在读写时几乎占用了100%cpu(一核心)。 查资料得知,Linux系统在读取ntfs格式硬盘时,会调用ntfs-3g程序去实时转换。由于树莓派cpu性能一般,所以导致读写超级慢(20m/s)。于是便有了想将手头的影片转成Linux支持的ext4格式的想法。由于硬盘过大,里面的数据也太多,刚好遇上挖矿热,买不到比较便宜的硬盘,所以才有了这篇文章的骚操作。之所以称之为“骚操作”,是因为此篇文章所涉及到的无损转格式的方式虽说是某知名网站推荐的方式,但对于数据安全极不友好,不建议不了解硬盘、Linux系统相关知识的小白尝试。 如果你实在有需求要按照本文操作来转格式的话,由停电,电脑死机等一系列问题导致的数据丢失,本人概不负责! 主要流程 由于整个过程实在耗费时间和资源,这里先讲讲主要流程,在每个板块都会写出详细步骤,以及遇到的问题和解决方法。 Linux下停止正在使用该磁盘的进程,卸载磁盘 磁盘压缩主分区ntfs(分区N1),格式化出一个Ext4分区(分区E1) 将主分区的文件尽可能多的移动到Ext4分区,知道Ext4分区塞满 如果主分区还有文件,则重复2-3步骤,直到主分区文件全部被移动到新的分区。 格式化主分区为Ext4(N1),将临近主分区、存有数据的Ext4分区(E1)里面的全部数据移到主分区。 删除Ext4分区(E1),并将删除腾出来的空间去扩容主分区(N1) 如果之前有创建多个Ext4分区的话,重复5-6步骤,直到整个硬盘只剩一个Ext4分区即完工! 强烈建议数据在1/2磁盘空间以下,比如我10T硬盘4.7T数据,这样就可以只用分出一个区来保存数据就行,省了很多步骤。 卸载硬盘 为避免出现数据被更改的问题,先停止正在使用该硬盘的进程,然后使用umount命令卸载硬盘才进行数据转移的操作。 如上,如果使用umount卸载时出现“target is busy”,则说明该磁盘正在被进程占用,我们使用lsof查看占用的进程,将其关掉再卸载即可。 压缩分区(6h) 由于数据是散乱存放(非连续)在硬盘上的,所以导致我是用Windows磁盘管理工具去压缩卷的时候,本应该有5T空间剩余,磁盘管理工具却只能压缩出500G左右空间。 所以我使用DiskGenius工具,它应该是帮忙整理磁盘的内容尽量靠前且连续,然后再压缩卷。我这里使用DiskGenius可以压缩出4.55TB,耗时大概6小时。 压缩完成后,将新分区格式化为Ext4格式即可。Windows下无法识别,可以用DiskGenius软件看到新的分区。 数据转移(10h+23h) 考虑到稳定性,我原本打算用DiskGenius在windows下将ntfs分区的数据转移到ext4分区的,可这货居然提醒我 “该功能是Pro用户才能使用”,便转换思路,使用双系统的Ubuntu去操作转移。后来想想,Ubuntu远程操作也方便,应该为首选方案的,最后,我还是将硬盘插上我的Ubuntu,然后使用使用命令行在tmux下进行mv操作。操作完我就去上班了。 好景不长,等我回到家时,想查查进度的我却发现硬盘没了!然后键盘也失灵。仔细想想,既然硬盘已不存在挂载中,键盘也失灵,那我本着重启能解决99%问题的心态重启Ubuntu(对,就这么严谨...)。重启后,系统正常使用,然后查看日志,便发现HC died报错。 果然不是我一人,万能的网友也有遇到这个问题的,也给出了详细解决方案。 https://zhuanlan.zhihu.com/p/158688481 于是我重新运行mv命令去转移数据,由于之前已经转移过部分数据,所以只需要转移未转移的部分即可。 最后终于转移完成(我已经将ntfs分区格式化为Ext4了,第一个卷) 最后将清空的ntfs分区(N1)格式化为Ext4即可。 最后的数据转移(30h) 由于分区无法向前合并,我这里还是将tmp分区的内容全部转移到Elements分区。 考虑到复制任务占用电脑,便把硬盘插到树莓派上进行mv操作。(由于我的硬盘是外部供电,也不用担心供电不足或者其他问题) 此番很顺利,没有出现Ubuntu的HC died的报错,花费30小时终于将所有内容转移到第一个Ext4分区了。 分区合并(15mins) 首先卸载分区。然后使用fdisk进行分区合并的操作。 使用Linux下的fdisk命令操作。内容有点多,由于没有截图,这里不详细展开。 流程:删除第二个分区(9999999-66666666),再删除第一个分区(2048-9999999),最后新建一个分区(2048-66666666)即可。 注意:新建分区的时候,如果显示“已检测到文件系统,是否清空?”的提示,千万选择否,不然数据可能被清空。 最后,使用fdisk检查你的硬盘编号,再使用e2fsck来执行磁盘检测。最后使用resize2fs命令来扩容区分1即可。 至此,本文的ntfs无损转Ext4已完成,最后只需使用mount挂载在树莓派系统即可。 后记 本次是本人的作死之旅,望不要盲目跟从,数据无价,在对硬盘进行任何操作时,请提前备份。 由于读写“同时”进行,所以数据转移过程极慢,我这边WD Elements 10T硬盘拷贝5T大概30h,瞬时读写速度大概50m/s,该数据仅供参考。 如果你是和本人一样不怕丢失数据,手头有没有多的硬盘,并且ntfs格式的硬盘实在用不下去了,你可以跟着本文的操作去走,但是如出现数据丢失,本人概不负责。 最后,放几张图吧。 Windows SMB本地挂载 fdisk磁盘信息 读写速度测试 参考 https://recoverit.wondershare.com/partition-management/ntfs-to-ext4-easily.html#part3