Linux 上的复制、备份与镜像
今天逛社区,偶尔发现有人询问大量小文件的移动复制与备份的问题,第一反应就是 cpio
。因为以前备份 Gentoo 的时候,都是直接 cpio
来处理的,当然,tar、cp、dd 也可。至于 dump & restore 则由于文件系统适应性基本被放弃。
cp
cp
是常见的复制文件或目录的命令,是 copy 的缩写。譬如:
复制文件
cp /path/a /path/b
复制文件夹
cp -r /path/dir-a /path/dir-b
cp
的一些常见的参数:
- -a: 相当于 -pd –preserve=all
- -b: 类似 –backup,但不接受任何参数
- -d: 若存在软链接档案,则复制链接文件的属性,而非文件本身
- -f: 意为 force,强制覆盖
- -i: 在覆盖相同档案时询问
- -p: –preserve=mode,ownership,timestamps 复制时包括档案的属性
- -r: 递归参数,一般用于复制目录
详细的可以使用 man cp
来查看
tar
在 Linux 下发布产品时,最常使用的就是 tar
命令。她可以对档案进行打包备份操作。
一些常见的参数:
- -c: create,建立一个 tar 包
- -x: 解开一个压缩包
- -t: 查看 tar 里的文件
- -z: 使用 gzip 来压缩
- -j: 使用 bzip2 来压缩
- -J: 若存在 xz lzip lzma,则可以直接打包成 xz lzip lzma
- -v: 列出打包进程
- -f: tar 包名,-f 参数后需紧跟 tar 包名
- -p: 保留文件权限
常见的打包命令
tar cvf /path/name.tar /path/name
tar cvjf /path/name.tar.bz2 /path/name
tar cvzf /path/name.tar.gz /path/name
tar cvJf /path/name.tar.xz /path/name
tar cvJf /path/name.tar.lzma /path/name
常见的解包命令
tar xvf /path/name.tar
tar xvjf /path/name.tar.bz2
tar xvzf /path/name.tar.gz
tar xvJf /path/name.tar.xz
tar xvJf /path/name.tar.lzma
详细命令可以使用 man tar
来查看
dd
dd
在 Linux 环境下,也是非常有用的一个命令,她可以拷贝一个文件时进行指定的转换,尽管我只是用她来制作 u 盘镜像和备份 mbr 信息。
一些常见的参数:
- if=input: 读取输入文件
- of=output: 输出到文件
- bs=n: 设置输入输出的块大小为b bytes,譬如 bs=512、bs=1024M、bs=1G
- count=n: 拷贝 n 个输入的块
常见的命令
dd if=/dev/sdx of=/path/to/mbr bs=512 count=1 # 备份 mbr
dd if=/path/to/mbr of=/dev/sdx bs=512 count=1 # 恢复 mbr
dd if=/dev/zero of=/path/swap bs=1M count=1024 # 创建个 1024MB 的文件 swap
dd if=/path/to/image of=/dev/sdx bs=1M # 制作 u 盘启动盘
dd if=/dev/cdrom of=/path/to/iso # 制作 cd 的 iso 镜像
详细使用方法可以 man dd
。
cpio
cpio
可以从 cpio、tar、pax、zip、jar、iso 等等格式的文件中存取档案,她是为备份而生的。
一些常用参数:
- -i: input 模式,还原备份档
- -o: output 模式,建立备份档
- -p: Pass-through 模式,直接将文件复制到目的目录
- -t: 查看档案文件,仅使用在 i 模式下
- -a: 重新设置文件的存取时间
- -c: 使用旧的 POSIX portable 方式存储,o 模式专用
- -d: 自动建立目录,i & p 模式专用
- -m: 创建文件时,保留以前文件的修改时间,i & p 模式专用
- -u: 置换所有文件,不论日期时间的新旧与否,皆不予询问而直接覆盖
- -v: 将存取过程打印到屏幕上
- -A: 追加文件到备份档,o 模式专用
- -B: 存取块大小设置成 5120 byte,o 模式专用
- -C: 存取块大小,单位是 byte,O 模式专用
- -L: 若存在软链接档案,则链接档案的属性,而非链接本身,o & p 模式专用
常见的使用场景
find /path/to/dir -print0 | cpio --null -oacvB > /path/to/name.cpio # o 模式,打包目录成 cpio 档案
find /. | cpio -oacvB > /path/to/system.cpio # o 模式,备份整个系统
cpio -ivt < /path/to/name.cpio # i 模式,列出 name.cpio 的文件
cpio -idmuv < /path/to/name.cpio # i 模式,还原 cpio 档案
find /path/to/dir -print0 | cpio --null -pvd /path/to/dir1 # p 模式,直接复制文件到新目录