dd命令使用体会

正式版的tx2 nx只有16G的emmc内存,装完系统和cuda等环境后几乎没有空间了,公司目前使用的载板有外部空间128G,生产时就需要系统的迁移。最近在使用dd命令对jetson tx2 nx进行系统迁移,对dd有了一些了解。首先,dd命令执行的是拷贝过程,这里的拷贝的不是文件意义上拷贝,而是基于物理存储的拷贝。我理解为把物理地址上的东西进行拷贝,并不会关系物理地址上是否有逻辑上的文件。

此外,dd命令只会简单的按块进行拷贝,并不会事先查看存储介质空间是否够用,直到目标空间不够才会报错。

下面介绍几个最近使用的dd命令,这里有个小问题需要注意如果使用u盘进行备份需要看一下u盘的文件类型,如果是FAT*(具体数字忘了)文件格式可能会有问题,需要改成NTFS。原因是FAT*最大单个文件就是4G。这里的if和of是input file和output file的意思,就是要拷贝源路径和目标路径,bs指一次拷贝的大小,status=progress就是打开dd自带的拷贝进度。

sudo dd if=/dev/mmcblk1p1 of=/media/tx2nx/back.img.raw bs=65536 status=progress

因为拷贝过程根据bs大小逐步进行,所以也可以加上count参数,指定拷贝多少块。上文已经说过了,dd只会傻傻的拷贝物理存储,所以,你拷贝多大的物理空间,目标文件就有多大。例如,我现在的tx2 nx系统加上环境和代码全部占用了35G但是物理空间一共128G,所以理论上也必须至少有128G的U盘或者硬盘才够,但我们目前使用了64G的u盘执行系统迁移任务,目前是没有问题,只是会在迁移到u盘满时报信息u盘内存不足。这里就和linux文件存储方式有关了,我猜测35G的文件在物理上不是均匀分布在128G上的,我们使用64G的u盘拷贝128G的前64G部分已经包括了文件系统的35G,但这里其实是有风险的。比较好的方法是使用大容量的u盘,或者压缩后存储。我测试中压缩后占用不到9G。但压缩也是有代价的,会增加耗时,尤其是在系统迁移到u盘的过程中。会增加到3倍多。从20分钟增加到1小时多(usb3.0 u盘),同时压缩的系统从u盘拷到新tx2 nx上耗时也增加到之前的2倍多,从15分钟到30分钟。下面是压缩迁移的命令,分别是从tx2 nx拷贝到u盘,和还原的。注意需要先取消挂载u盘再进行操作。

进入只读模式

sudo echo u | sudo dd of=/proc/sysrq-trigger

挂载u盘

sudo mount /dev/sda1 /media/tx2nx

系统迁移

sudo dd if=/dev/mmcblk1p1 bs=65536 status=progress | gzip -c > /media/tx2nx/back.img.gz

还原:

sudo gunzip -c /media/tx2nx/sandisk/img/back.img.raw | dd of=/dev/mmcblk1p1 bs=65536 status=progress

上一篇:TX2 swap


下一篇:TX2跑通yolov4