我正在尝试对驱动器进行网络备份。这个过程有两台机器。
电脑1:
电脑2:
我在 PC2 上执行以下操作:
sshfs root@PC1:/dev ~/Desktop/netdisk/
Run Code Online (Sandbox Code Playgroud)
安装得很好。我在 ~/Destkop/netdisk/ 中有可用的 sdb。下一步:
sudo dd if=~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)
产生错误:
dd: opening `netdisk/sdb': Permission denied
Run Code Online (Sandbox Code Playgroud)
当我检查 sdb 的权限时:
brw-rw---- 1 root disk 0, 0 Jan 3 10:47 sdb
Run Code Online (Sandbox Code Playgroud)
由于我以root@ PC1 的身份通过 ssh 连接到 PC1,这是否意味着我对作为 sshfs 挂载的文件具有 root 访问权限?
从这个例子看来它没有,这里有我遗漏的概念吗?
远程文件以您登录的远程用户(即 root)的身份进行访问。真的没有其他办法了。
您收到的错误是由于本地权限所致。这对于 SSHFS 所基于的 FUSE 来说是一个奇怪的现象。默认情况下,只有进行挂载的用户才能访问 FUSE 文件系统。即使 root 也无法访问它。阻止 root 用户访问并不是安全限制,因为 root 可以 su(1)/setuid(2) 到挂载文件系统的用户,这是 FUSE 内部架构的限制。由于您以非 root 用户身份进行了安装,因此也以该非 root 用户身份访问文件系统。无论如何,在 sudo 下运行dd不会给你带来任何东西,所以只需运行
dd if=~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)
(无用的使用dd)简化为
cat ~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)
哪个无用的使用cat简化为
gzip <~/Destkop/netdisk/sdb >~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)
如果sdb是块设备而不是远程端的常规文件,则它无法通过远程文件系统工作(如果设备条目是设备条目,则它将是本地设备,这是不可取的)。使用 ssh 访问它:
ssh root@PC1 cat /dev/sdb | gzip >~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)
无论如何,您可以通过在远程端进行压缩来节省带宽:
ssh root@PC1 'gzip </dev/sdb' >~/Destkop/ddbackup/image.gz
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4682 次 |
| 最近记录: |