案例:tom blog的file服务器,因为所有的图片都是以/data/xxx/xxx/blog/yeah/month/day/article/xxx.jpg,文件不大,但是目录深,数量多。
以ftp,sftp传大量小文件毫无疑问非常慢;而rsync是需要文件遍历之后再传输的,rsync给每个文件的每层目录都分配一个FD(文件描述符),对系统资源浪费极大,几个小时都还没遍历完。
这样的情况下,下面的传输方法就非常实用:
tar -cf - /data/xxx/xxx/blog | ssh user@dst_host tar -C target_dir -xvf -
将目录打包到标准输出,再通过ssh通道传送到远端之后解包。
这个命令的机制是不遍历的,又不需要占用系统太多的FD,是个折衷的办法,能解决文件备份的问题。
PS:
如果我要
tar -cf - /data/xxx/blog |ssh root@dst_host tar -cf target_dir.tar -
行不?
或者换一种说法:
我现在机器上硬盘空间不够了
想把目录用tar 打成包传到另一台机器上(本机不留,因为没有空间了)
上面命令可以吧?
解决方法:
tar -cf - /data/xxx/blog | ssh root@host "cat > my.tar"
以ftp,sftp传大量小文件毫无疑问非常慢;而rsync是需要文件遍历之后再传输的,rsync给每个文件的每层目录都分配一个FD(文件描述符),对系统资源浪费极大,几个小时都还没遍历完。
这样的情况下,下面的传输方法就非常实用:
tar -cf - /data/xxx/xxx/blog | ssh user@dst_host tar -C target_dir -xvf -
将目录打包到标准输出,再通过ssh通道传送到远端之后解包。
这个命令的机制是不遍历的,又不需要占用系统太多的FD,是个折衷的办法,能解决文件备份的问题。
PS:
如果我要
tar -cf - /data/xxx/blog |ssh root@dst_host tar -cf target_dir.tar -
行不?
或者换一种说法:
我现在机器上硬盘空间不够了
想把目录用tar 打成包传到另一台机器上(本机不留,因为没有空间了)
上面命令可以吧?
解决方法:
tar -cf - /data/xxx/blog | ssh root@host "cat > my.tar"