我想使用选项oflag=append
将dd
内容附加到文件。这是因为在创建新的较大文件会耗费过多资源的情况下,这会增加循环设备的基础文件大小。
无论如何,这可能dd
不是最好的选择,但这是我所知道的最好的选择。欢迎提出更好的建议!
我的 CentOS 4.8 X86_64 服务器正在运行 coreutils 5.2.1。此版本的 coreutils 附带的版本dd
不支持该oflag
选项。官方存储库中似乎没有较新的版本。
我注意到coreutils 的最新版本是 8.5,并假设在 5.2.1 和 8.5 之间的某个地方oflag
添加了该选项。
假设我需要将 coreutils 升级到比 CentOS 4.8 x86_64 当前提供的版本更新的版本:
- 升级 coreutils 安全吗?
dd
支持该选项所需的最低版本是多少oflag
?- 我从哪里可以得到 RPM?我不想从源代码进行编译。
答案1
我不知道有任何其他方法可以实现你的愿望。
升级似乎很危险;在 coreutils 的长二进制文件中的某个地方,很有可能出现向后不兼容的更改。几乎系统上的每个脚本都使用来自 coreutils 的二进制文件,因此在错误的位置进行向后不兼容的更改可能会对您的机器造成严重破坏。
下一个选项:获取二进制 RPM。我认为这不太可能,除非您自己构建它。
不过,您可以安全地执行的操作是构建 coreutils 源(从未这样做过,但它可能只是一个配置、make、make install),直至包括“make”部分。不要执行‘make install’。然后,从新生成的二进制文件中挑选新的 dd,将其作为 dd_new 放入 /bin 中,一切就绪。安全无虞。
也就是说,提供新的 coreutils 建立在旧的 glibc 上:)
答案2
我认为您可以使用“seek”完成您想要的 dd 任务,而无需构建新的核心实用程序。
ls -l loopfile
获取大小,除以 1024,然后:
dd if=/dev/zero of=loopfile bs=1M seek=1024 count=2048
(这是以 1M 块为单位写入的,因此跳过 1G 的输出,然后向文件添加 2G。确保块大小可以均匀地划分为文件大小。您可能需要 1k 的块大小和更大的寻道和计数数字)
我会做一些小规模的实验。您可能还需要“ conv=notrunc
”。