AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 788794
Accepted
Andy Junghyun Kim
Andy Junghyun Kim
Asked: 2024-12-28 20:58:08 +0800 CST2024-12-28 20:58:08 +0800 CST 2024-12-28 20:58:08 +0800 CST

我是否意外删除了文件?如何恢复它们?

  • 772

我是一名刚毕业的博士生,现在遇到了一个严重的问题。我尝试将目录从服务器 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”是否也应该失败并出现错误消息?

  1. 这一系列命令是否会导致服务器 A 上的文件被删除?或者可能是其他原因导致了数据丢失?
  2. 有没有什么办法可以恢复它们?

提前谢谢您。我真诚地感谢您的帮助。

data-recovery
  • 1 1 个回答
  • 327 Views

1 个回答

  • Voted
  1. Best Answer
    telcoM
    2024-12-28T22:34:41+08:002024-12-28T22:34:41+08:00
    $ 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:
    

    这样就建立了一个sshfs连接:对于root服务器 B 上的用户,该目录/home/usr/labDesktop允许/home/lab/Desktop以服务器 A 上的用户的访问权限访问lab服务器 A 的目录。

    具体来说,这并不意味着服务器 B 上的用户lab可以访问/home/usr/labDesktop。

    $ cd labDesktop
    -sh: 44: cd: can't cd to labDesktop
    

    因此您无法cd以普通用户身份访问该目录lab。这是意料之中的。

    $ 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
    

    更具体地说,没有可供/home/usr/labDesktop 用户lab卸载的挂载条目,因为初始挂载是由用户完成的root,而不是lab。所以这个命令什么也不做。

    $ rm -r labDesktop
    rm: cannot remove 'labDesktop': Permission denied
    

    由于挂载是由用户 完成的root,因此用户lab根本没有 的写权限labDesktop。这是意料之中的。

    $ sudo rm -r labDesktop                          
    rm: cannot remove 'labDesktop': Device or resource busy
    

    该命令表示:“以用户身份root,删除目录内的所有内容labDesktop,包括目录本身。”这是错误的。

    由于用户可以root通过 sshfs 挂载完全访问服务器 A 的目录,因此该命令将删除目录中的所有内容。但删除目录本身会失败,因为目录实际上是一个挂载点。但是,只有在删除目录中的所有其他内容后才会出现该错误消息。

    $ 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)
    

    这证实了服务器 A 的目录确实仍然处于挂载状态并且仅可访问root。)

    $ 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
    

    用户lab无权卸载root已为自己安装的程序。

    $ sudo umount /home/usr/labDesktop
    

    通过使用sudo,您以用户身份发出卸载请求root,因此它会成功。

    $ rm -r /home/usr/labDesktop
    

    成功卸载后,您可以删除该labDesktop目录,因为它现在只是一个普通的空目录。

    (Armdir /home/usr/labDesktop就足够了。rmdir每当您想要删除一个空目录时,这都是一个好习惯,因为如果目录意外地非空,它就不会执行任何操作并生成错误消息。)

    1. 这一系列命令是否会导致服务器 A 上的文件被删除?

    毫无疑问,一旦您以rm -r在本地服务器 B 上执行挂载的同一用户身份运行该命令,命令中指定的远程用户sshfs就大概是远程服务器 A 上目录的所有者,因此应该具有完全访问权限。

    有了sudo,您就有了对挂载的完全访问权限,因此服务器 B 完全按照您的要求执行并删除了它可以在挂载点内访问的所有内容。

    1. 有没有什么办法可以恢复它们?

    命令行rm不会“将文件移至垃圾箱”。这是一个实际上立即删除指定文件的命令。

    您对服务器 A 的该目录有良好的备份吗?

    如果没有,并且您想要尝试恢复已删除的文件,那么重要的是立即停止在服务器 A 上使用文件系统,这样曾经包含已删除文件的块就不会被较新的数据覆盖。应该在服务器 A 上卸载文件系统,然后可以在其上运行适当的数据恢复实用程序。任何已恢复的文件都应保存到其他文件系统:重要的是,在不需要/不值得进​​行进一步的恢复操作之前,不要进一步修改丢失数据的文件系统。

    如果服务器 A 上的文件系统位于 SSD 上,则还必须确保在恢复操作完成之前不对整个 SSD 执行定期 TRIM 优化。如果文件系统被 TRIMmed,则任何已删除的文件很可能将不可挽回地消失。

    • 14

相关问题

  • 将目录移动到不存在的位置?

  • MDADM - 灾难恢复或从我将 RAID5 阵列放入的状态继续前进

  • 如何从 2 磁盘 NAS 中曾经属于 RAID1(MD 上的 LVM)的磁盘恢复/复制数据?

  • 用于移动使用 fdupes 或其他重复数据删除包删除的保留文件的脚本

  • dd_rescue 和 ddrescue 有什么区别,什么时候更喜欢哪一个?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve