导入iso镜像,重新打包时,单个文件超过4G只能保存一部分
[步骤]
打包一个iso镜像,里面放一个超过4G的文件。
上传到平台,创建新版本
从平台下载该版本的镜像
[结果]
镜像大小比之前的小很多。
[期望]
镜像大小不变,里面的文件读取正常。
mkisofs将一个包含超过4G文件的目录打包成iso,然后使用fuseiso挂载,再对fuseiso挂载的目录使用mkisofs打包,会发现生成的iso文件变小了,这个过程没有报错。
解决步骤:
-
重塑问题发生环境
- 先挂载一个镜像,由于挂载的镜像只有只读模式,故要在镜像中添加大于4g的文件时不能直接复制进去。
- 将镜像中的内容拷贝出来,再添加大文件到新的目录下用mkisofs打包成新的包含大文件的镜像
- 打包命令: sudo mkisofs -o …/xxx.iso -allow-limited-size -J -R -A -V -v …/filesystem
- 必须添加 -allow-limited-size 参数才能打包带有大于4g的单文件系统
-
使用fuseiso 对新镜像挂载
- 挂载命令:(不能有sudo) fuseiso …/xxx.iso /media/filesystem/
- 挂载发现挂载目录中的大文件***变小***
-
使用mount 对新镜像挂载
- 挂载命令:sudo mount -o loop …/xxx.iso /media/filesystem/
- 挂载发现挂载目录中的大文件大小***不变***
-
产生问题:为什么使用fuseiso不能正确挂载镜像,mount可以。fuseiso挂载没有大文件的系统是正常的。
-
总结问题可能出现的地方
- 新的镜像文件和之前的镜像文件除了添加了大文件还有没有其他不同。
- 为什么mount是不受影响的。
-
查阅资料得到:
1.-
故得知在新文件的文件系统类型已经更改成UDF类型,而不是原来的ISO9660类型
-
查看fuseiso源码得知:
- 似乎fuseiso并不支持UDF系统文件类型,故有可能是此原因
-
查看mount支持的文件系统类型
- 得知mount是支持udf文件系统类型的,故mount是可以正常挂载的。
-
-
结论:由于在打包含有大于4g单个文件的系统时,必须使用-allow-limited-size命令才能打包,原因是iso9660文件系统类型不能表示大于2GiB的文化。所以将文件系统类型转化成了UDF类型。又因为fuseiso目前并不能支持UDF类型的正确解析。故挂载时没有报错,但是与iso文件中的内容不符。mount是支持挂载UDF类型,所以能正常挂载。由于需要使用fuseiso可以无需root权限即可挂载的功能故无法摘除\替换fuseiso,故此bug无法直接解决。只能先预先识别iso是否是UDF格式的,如果是,则要求退回上游处理。