我是一名刚毕业的博士生,现在遇到了一个严重的问题。我尝试将目录从服务器 A (/home/lab/Desktop) 映射到服务器 B (/home/usr/labDesktop),因为服务器 B 的计算能力更强。在工作过程中,服务器 A 上的目录中的所有数据都消失了。
以下是我运行的可能导致问题的部分命令序列:
$ sudo sshfs lab@ipaddress:/home/lab/Desktop /home/usr/labDesktop
[sudo] password for usr:
The authenticity of host 'ipaddress (ipaddress)' can't be established.
XXX key fingerprint is XXX.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
lab@ipaddress's password:
$ ls
labDesktop examples.desktop
$ cd labDesktop
-sh: 44: cd: can't cd to labDesktop
$ ls
labDesktop examples.desktop
$ sudo sshfs lab@ipaddress:/home/lab/Desktop /home/usr/labDesktop
lab@ipaddress's password:
read: Interrupted system call
$ fusermount -u /home/usr/labDesktop
fusermount: entry for /home/usr/labDesktop not found in /etc/mtab
$ ls
labDesktop examples.desktop
$ cd labDesktop
-sh: 49: cd: can't cd to labDesktop
$ rm -r labDesktop
rm: cannot remove 'labDesktop': Permission denied
$ sudo rm -r labDesktop
rm: cannot remove 'labDesktop': Device or resource busy
$ mount | grep /home/usr/labDesktop
lab@ipaddress:/home/lab/Desktop on /home/usr/labDesktop type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0)
$ fusermount -u /home/usr/labDesktop
fusermount: entry for /home/usr/labDesktop not found in /etc/mtab
$ fusermount -uz /home/usr/labDesktop
fusermount: entry for /home/usr/labDesktop not found in /etc/mtab
$ sudo umount /home/usr/labDesktop
$ mount | grep /home/usr/labDesktop
$ rm -r /home/usr/labDesktop
$ ls
examples.desktop
如您所见,“sudo rm -r”抛出了一条错误消息“rm:无法删除”。因此,我不认为这实际上删除了数据。此外,在运行“sudo rm -r”之前,我尝试使用“fusermount -u”卸载。如果“fusermount -u”失败并出现错误消息,那么“sudo rm -r”是否也应该失败并出现错误消息?
- 这一系列命令是否会导致服务器 A 上的文件被删除?或者可能是其他原因导致了数据丢失?
- 有没有什么办法可以恢复它们?
提前谢谢您。我真诚地感谢您的帮助。
这样就建立了一个
sshfs
连接:对于root
服务器 B 上的用户,该目录/home/usr/labDesktop
允许/home/lab/Desktop
以服务器 A 上的用户的访问权限访问lab
服务器 A 的目录。具体来说,这并不意味着服务器 B 上的用户
lab
可以访问/home/usr/labDesktop
。因此您无法
cd
以普通用户身份访问该目录lab
。这是意料之中的。尝试再次安装它失败,可能是因为它已经被安装。
更具体地说,没有可供
/home/usr/labDesktop
用户lab
卸载的挂载条目,因为初始挂载是由用户完成的root
,而不是lab
。所以这个命令什么也不做。由于挂载是由用户 完成的
root
,因此用户lab
根本没有 的写权限labDesktop
。这是意料之中的。该命令表示:“以用户身份
root
,删除目录内的所有内容labDesktop
,包括目录本身。”这是错误的。由于用户可以
root
通过 sshfs 挂载完全访问服务器 A 的目录,因此该命令将删除目录中的所有内容。但删除目录本身会失败,因为目录实际上是一个挂载点。但是,只有在删除目录中的所有其他内容后才会出现该错误消息。这证实了服务器 A 的目录确实仍然处于挂载状态并且仅可访问
root
。)用户
lab
无权卸载root
已为自己安装的程序。通过使用
sudo
,您以用户身份发出卸载请求root
,因此它会成功。成功卸载后,您可以删除该
labDesktop
目录,因为它现在只是一个普通的空目录。(A
rmdir /home/usr/labDesktop
就足够了。rmdir
每当您想要删除一个空目录时,这都是一个好习惯,因为如果目录意外地非空,它就不会执行任何操作并生成错误消息。)毫无疑问,一旦您以
rm -r
在本地服务器 B 上执行挂载的同一用户身份运行该命令,命令中指定的远程用户sshfs
就大概是远程服务器 A 上目录的所有者,因此应该具有完全访问权限。有了
sudo
,您就有了对挂载的完全访问权限,因此服务器 B 完全按照您的要求执行并删除了它可以在挂载点内访问的所有内容。命令行
rm
不会“将文件移至垃圾箱”。这是一个实际上立即删除指定文件的命令。您对服务器 A 的该目录有良好的备份吗?
如果没有,并且您想要尝试恢复已删除的文件,那么重要的是立即停止在服务器 A 上使用文件系统,这样曾经包含已删除文件的块就不会被较新的数据覆盖。应该在服务器 A 上卸载文件系统,然后可以在其上运行适当的数据恢复实用程序。任何已恢复的文件都应保存到其他文件系统:重要的是,在不需要/不值得进行进一步的恢复操作之前,不要进一步修改丢失数据的文件系统。
如果服务器 A 上的文件系统位于 SSD 上,则还必须确保在恢复操作完成之前不对整个 SSD 执行定期 TRIM 优化。如果文件系统被 TRIMmed,则任何已删除的文件很可能将不可挽回地消失。