我在远程服务器上的文件夹中编译了一个 Linux 根文件系统。我需要将其下载并放入本地计算机的 SD 卡中,并使用它来启动嵌入式计算机。如何在下载文件时保留文件的每个属性?谢谢。
答案1
tar
应该可以做到。它存储有关所有权和权限的信息,默认情况下是递归的。我最终明白 SD 卡上文件的所有权既不应该依赖于服务器上定义的用户或组,也不应该依赖于本地计算机上定义的用户或组;所以--numeric-owner
是个好主意。
在提取时您需要使用--same-owner
和--same-permissions
标志(如果您以 root 身份执行此操作,则这些标志是默认的)。
如果您有权在远程服务器上将文件安装为块设备 ( losetup
),则可以在文件内创建文件系统,mount
然后将文件部署到其中,以便它们“保留每个属性”( sudo cp -a
)。然后(在umount
、sync
和之后losetup -d
)您仅下载所述文件并将其原始推送到本地 SD 卡的分区(使用dd
、cp
或cat
任何其他方式)或将其安装到本地并检索文件。
请注意,许多mkfs
工具都可以对常规文件进行操作。此外,的现代实现mount
可以半直接地挂载常规文件(losetup
为您执行所有相关操作)。您可能根本不需要明确使用losetup
。它可能像:
# on the server
truncate -s <desired_image_size> image
mkfs.<type> <options> image
sudo mount image <mountpoint>
sudo cp -a <directory>/* <mountpoint>/ # warning: * doesn't match dotfiles
sudo umount <mountpoint>
即使你需要在服务器上无法完成的额外步骤,也可以以整个文件系统的形式下载文件担保文件系统支持的所有功能在传输过程中都会保留。您关心的是在从另一个文件系统复制/复制到另一个文件系统时保留它们,但传输本身无法改变它们。在某些情况下,这可能比 更好tar
,特别是当您需要“特殊”功能时(虽然这里似乎不是这种情况)。因此,这种方法是最通用的。