使用 busybox 克隆根目录树

使用 busybox 克隆根目录树

我有一个基于 TI DaVinci(与 OMAP 类似的 ARM 架构)的系统,该系统使用 TFTP 和 NFS 安装的根文件系统进行网络启动,并尝试使其在没有网络启动服务器的情况下独立启动。

基本方法是将内核映像复制到 NAND 闪存,将根文件系统复制到连接的 SATA 磁盘(NAND 闪存对于整个系统而言还不够大),然后配置 u-boot 从 NAND 闪存加载内核并通过一个适当的root=论点。

我陷入了复制文件系统的步骤。 这个问题是相关的,但没有一个建议有效,因为我只有 busybox 版本的cpcpio工具,并且--one-file-systembusybox 不支持该选项。

只有busybox提供的工具能力,如何克隆根文件系统?在 NFS 服务器(运行 Ubuntu 的 x64 架构)上运行存档创建命令然后在目标上解压是否有帮助?

答案1

BusyBoxfind支持该-xdev选项,因此您可以通过这种方式制作根文件系统的 cpio 存档。与 tar 不同,cpio 在归档目录时并不归档该目录的内容。

find . -xdev | cpio -H newc -o |
{ cd /mnt && cpio -m -i; }

我不太明白为什么你要从设备构建图像。我希望在开发计算机上使用构建脚本构建文件系统映像,并部署该映像。

答案2

我认为你可以使用cp.来自busybox.net 网站:

CP
Usage: cp [OPTION]... SOURCE DEST

           or: cp [OPTION]... SOURCE... DIRECTORY

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Options:

            -a      Same as -dpR
            -d      Preserve links
            -p      Preserve file attributes if possible
            -R      Copy directories recursively

例子

$ cp -a / /mnt/newroot

柏油

如果cp无法处理任何设备,例如/dev/zero我很确定它不能,您也许可以使用tarBusyBox 中也包含的设备。

$ (cd /; tar cf - .)|(cd /mnt/newroot; tar pxvf -)

答案3

似乎为此使用 busybox 残缺的工具带来的麻烦远远大于其价值,因为这确实需要单文件系统处理,而 busybox 缺少它cp。可能find可以用于单独复制文件并避免递归到安装点,但这会涉及很多单独的进程并且速度非常慢。

在 NFS 服务器上准备文件系统是一个更可行的替代方案。使用 计算分区大小(以字节为单位)fdisk -l,然后

truncate -s N the-root-image
mkf.ext3 the-root-image
sudo mount -o loop the-root-image /mnt/somewhere

现在使用链接问题中找到的命令复制内容

sudo rsync --archive --inplace --hard-links --acls --xattrs --devices --specials --one-file-system --8-bit-output --human-readable --progress path/to/nfs/share /mnt/somewhere

将图像放在目标可以访问的网络位置:

sudo umount /mnt/somewhere
mv the-root-image path/to/nfs/share

最后,从目标将图像放置到目标磁盘上

dd if=/the-root-image of=/dev/sda1 bs=16M

答案4

您应该安装(或绑定安装)到某个目录:

mount /dev/mmcblk0p1 /mnt
cd /mnt
tar cjf /otherdisk/archive.tar.bz2 *

您还可以通过 ssh 发送结果(如果在 busybox 配置中启用)而不是存储在本地,顺便使用目标主机计算能力/安装的工具来执行压缩:

tar cf - * | ssh user@host "bzip2 | cat > archive.tar.bz2"

根据您的意愿调整压缩工具、存档名称等:)

相关内容