您现在的位置是: 首页 > 修复教程 修复教程

linux格式化恢复_linux格式化恢复目录数据

ysladmin 2024-05-18 人已围观

简介linux格式化恢复_linux格式化恢复目录数据       希望我能够回答您有关linux格式化恢复的问题。我将根据我的知识库和研究成果回答您的问题。1.rm -rf 误删数据,如何进行磁盘数据恢复2.L

linux格式化恢复_linux格式化恢复目录数据

       希望我能够回答您有关linux格式化恢复的问题。我将根据我的知识库和研究成果回答您的问题。

1.rm -rf 误删数据,如何进行磁盘数据恢复

2.Linux中格式化失败,没有找到命令

3.linux命令的格式linux命令的格式

4.Linux 系统文件误删除,求恢复!!!

5.windows和linux双系统,windows恢复出厂设置(格式化)会有什么问题吗?

linux格式化恢复_linux格式化恢复目录数据

rm -rf 误删数据,如何进行磁盘数据恢复

       在工作中,我们知道一些操作命令危险性很高,如: rm -rf,它会造成数据的误删除。如果万一出现这样情况导致数据误删除时,我们应该如何对数据进行恢复呢?

        删除数据的两种场景

        通常有两种数据删除的场景是你需要清晰了解的。第 1 个是在执行 rm -rf 删除文件时,该文件正在被进程使用。第 2 个是这个文件并没有被其他进程所使用,而被误删除。本课时我将围绕这两种场景进行讲解并演示。

        为什么数据可以恢复

        既然我执行了 rm -rf 命令,不就是删除文件了吗,为什么又可以恢复数据呢?首先我来为你介绍一下其原由,对于第 1 种进程正在使用文件的场景,数据可以恢复是由因为 Linux 里,每个文件都有 2 个 link 计数器:i_count 和 i_nlink。

        i_count 的作用是当一个文件被一个进程引用时,它的数值会加 1,也就是说它记录的是文件被进程引用的次数。i_nlink 的作用则是记录文件产生硬链接的个数。Linux 系统只有在两个数值都清零的时候,文件才被系统认为是删除的。如果我们执行了 rm -rf,却并没有把 i_count 删除,假设此时删除文件有进程在使用,那么它(i_count)数值不为 0。这个时候就是文件看似被删除,但在操作系统还是能便捷的恢复回来。

        这就是第 1 种场景删除数据能够被找回的原因(由于 i_count 不为 0)。

        第 2 种场景是将没有被进程使用的文件误删除,此时 i_count 和 i_nlink 都为 0。这个时候文件的 inode 连接信息已经被删除了,我们就需要通存放文件的 block 单元,做数据块的数据找回。在系统上我们能看到的文件内容包括:文件名、文件大小、内容,但实际上它的存储依赖两个非常重要的单元,一个是 inode,它用于存放文件的相关元数据,它的元数据里会有一个类似于索引的值,能够索引到后面具体存放数据的 block 单元, block 是一个数据块,用来实际存放数据。我们在删除文件时,其实是把 inode 的链接删除了,但是 block 数据块,并没有删除。

        所以这个时候我们依然可以通过分析后端的 block 块,对文件进行恢复。因为 block 块保存着真实的数据,理论上可以作完整的找回数据,不过有一个风险:如果有进程在不断往磁盘写数据时,需要申请新的 block 块,如果操作系统分配已删除文件的 block 块时,那么新的写入数据就会覆盖 block 原来的数据,这时就会造成数据真正丢失的风险。

        所以,如果出现这样场景造成数据误删除,需要第一时间 umount 目录所在的磁盘设备。如果没有其他进程在不断地往同一个磁盘块(block)里写数据,那么你的数据理论上还是在 block 块里面,依然可以通过相关分析把数据找回。

        这就是我们为什么可以在这两个场景中把数据找回的原因,那么接下来我将讲解如何来恢复数据。我会通过两个案例来进行演示。

        案例演示

        我们先演示第 1 种场景,第 1 种场景是文件在被进程使用过程中被删除,这种场景该如何去恢复文件呢?

        首先我登录到测试环境的机器上,这里开启了两个窗口,第 1 个窗口我登录到了这台服务器上,cd /test 目录下,echo 一个测试文件(我把它命名为 DeleteFile),然后把这个内容("Delete file")重定向到本地的 deletefile.txt。这个时候我的测试文件就已经生成了。接下来我要做的是开启一个进程,让它实时地使用这个文件。

        这里我使用 tail 命令,持续地查看并且保持监听并使用这个文件。

        接下来在另一个窗口,我同样到/test 目录下,而此时我要执行的是 rm -rf ./deletefile.txt,这样就“彻底”把这个文件删除。接下来我们通过 ls,可以看到本地已经没有这个文件了。

        现在我们已经模拟出文件在进程使用过程中被删除的场景,那么接下来我们来演示恢复该文件。

        首先需要找到是哪个进程在使用这个文件,我们可以通过 lsof 命令,grep 刚刚删除的文件名称(deltefile.txt),会列出当前使用文件的进程。我们会看到tail 命令正在使用,它(进程)的 pid 是 4701。

        接下来我们要根据这条线索去恢复数据。我们知道该进程会有使用的文件句柄,那么我们对该进程的文件句柄目录进行查找,cd 到 /proc/{pid}/fd 目录下(这里 pid 为4701),我们到这个目录下,输入 ls -l 命令,这个时候我们会看到,使用这个文件(/test/deletefile.txt)并且它的文件句柄为 3。

        接下来我们要想办法把这个文件进行恢复,输入cp 3 /opt/recovertest/deletefile.txt_bak,这时我就把这 3 个文件做了一个拷贝,实现将数据恢复到 /opt/recovertest/deletefile.txt_bak 文件。

        这个时候cd /opt/recovertest/,cat deletefile.txt_bak 看一下里面的内容,可以发现这个文件的内容与刚刚生成的的测试文件内容一致,所以刚刚删除的文件恢复完毕。

        接下来我来演示误删数据场景2(在没有进程使用文件的情况下,如何恢复误删的文件)。演示这种场景,保险起见我在本地多挂载了一块 SDB 的独立硬盘设备。

        这种情况要如何恢复数据呢?我们需要安装 extundelete 这个工具。登录到我的测试机上,在这个演示场景里,挂载一块独立硬盘设备 /dev/sdb 并作数据格式化。完成格式化后。把单独的 sdb 设备,挂载到 test 目录下(mount /dev/sdb /test),接下来在 test 目录下生成一个内容为“deletetest ”的测试文件file(echo 'deletetest'>file),这个时候本地目录会生成一个测试的文件:file,再新建一个叫 testdir 的目录(mkdir /test/testdir),那么这时本地既有文件又有目录,也就是我接下来要演示删除的这些文件。

        我们可以通过 rm -rf ./*,直接把当前目录下的文件整体删除。然后我需要恢复这个文件,原理就是:通过分析它的 block 块,来恢复 inode 链接,要分析并恢复已删除文件的链接,我们要用到一些工具,这里推荐你使用一个叫 extundelete 的命令,它是在 Linux 下基于 ext3\ext4 的文件分析工具,可以对文件系统已删除的文件进行分析,并进行数据恢复。

        在执行命令extundelete之前需要先做的是 umount,把我们刚刚误删的目录 umount 掉(umount ?/test -l),避免有新的进程再往磁盘块里写数据,同时也便于执行工具进行接下来的分析。

        附:extundelete 命令安装方式:

        yum -y install bzip2 e2fsprogs e2fsprogs-devel gcc-c++

        wget /project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

        tar jxvf extundelete-0.2.4.tar.bz2?

        cd extundelete-0.2.4

        ./configure?

        make && make install

        安装好这个工具(extundelete)后,执行:extundelete /dev/sdb --inode 2

        我们可以在命令后面加入设备名称,然后加入上面的 inode 进行分析。完成之后我们会看到显示屏幕上已经出现了刚刚删除的文件、名称及目录,还会看到 inode 号以及当前的状态。

        我们也可以选择恢复单独文件类型文件,执行:extundelete /dev/sdb --restore-file file

        加入的选项是 --restore-file,后面加你想恢复的文件名称。

        在执行以上恢复操作之前,我先要确保数据恢复的目录 /opt/recovertest 下,cd ?/opt/recovertest 目录下,执行想恢复的文件 extundelete /dev/sdb --restore-file file。

        执行完命令后,会有一个成功的提示。此时在当前目录的 RECOVERED_FILES 目录,有对应恢复好的文件,一个是 file,一个是 file.v1(这个为刚恢复的文件),为什么是 file.v1 呢?因为我在做操作的时候有操作过两遍,所以它恢复了两个文件。第 1 个 file 是我之前写入的内容,第 2 个 file 则是由于我执行了第 2 次恢复,恢复的文件虽然也是 file,所以会自动命名成一个新的版本,叫作 file.v1(这个文件就是我们想要恢复的文件名称)。

        刚刚讲到的选项是恢复单个文件,假设我们要恢复所有文件的话,就把选项改为 --restore-all,这样就把分析出来的已删除文件进行了恢复。如果件,只想恢复某一个目录,就可以把 "all" 改成 directory,然后用 restore-directory 这种方式恢复单个已删除的文件目录。

        以上就是通过 extundelete 作场景 2 恢复演示。

        平时工作中,你还是需要谨慎进行操作系统指令,以避免产生文件系统误删的情况,毕竟恢复起来对我们的业务影响,还有数据风险都是存在的。

Linux中格式化失败,没有找到命令

       1、[root@localhost

       ~]#fdisk

       -l

       #输入上面fdisk

       -l这条命令查看你U盘的分区设备文件名

       2、[root@localhost

       ~]#mkfs

       -t

       vfat

       /dev/sdc4

       #/dev/sdc4是上面查到的分区设备文件名,看图

linux命令的格式linux命令的格式

如果没有正确分区,那么磁盘格式化就会失败。

       linux格式化命令,Linux下有一条mkfs命令,相当于format,可以对磁盘进行文件系统制作操作(或者说格式化)。

Linux 系统文件误删除,求恢复!!!

       Linux根分区的系统格式?

       分区需要取消挂载后才能进行格式化,根分区是不能umount的,因为你能登录进行命令操作,根分区就一定在使用状态,所以要修改根分区格式的话,只能重装系统。

       linux系统文件格式后缀详解?

       bz2------bzip2的压缩文件

       .gz------gzip的压缩文件

       .tar------tar打包文件(是包文件不是压缩文件)

       .tbz------tar打包并用bzip压缩文件

       .tgz-----tar打包并用gzip压缩的文件

       .au-----audio文件

       .gif-----gif图象文件

       .html/.htm-----HTML文件

       .jpg-----JPEG图象文件

       .pdf------电子文档(PDF格式的)

       .png-----PNG图象文件

       .ps------postscinpt文件(打印格式文件)

       .txt------纯文本文件

       .wav-----audio文件

       .xpm-----图象文件

       .conf-------配置文件

       .lock-------LOCK文件(用来判断一个文件或设备是否被使用)

       .rpm------REDHATPackage.Manager文件(套件包或软件包)

       .c-------C源程序代码文件

       .cpp------C++源程序代码文件

       .h-------C或C++程序的头文件

       .o------程序目标文件

       .pl------perl脚本文件

       .so-----类库文件

       .sh-----shell脚本与windows下的bat文件相似

       .bin-----binary二进制可执行文件

       linux上常见的文件系统格式有哪些?

       我们在Linux中常用的文件系统主要有ext3、ext2及reiserfs。Linux目前几乎支持所有的Unix类的文件系统,除了我们在安装Linux操作系统时所要选择的ext3、reiserfs和ext2外,还支持苹果MACOS的HFS,也支持其它Unix操作系统的文件系统,比如XFS、JFS、Minixfs及UFS等,您可以在kernel的源码中查看;如果您想要让系统支持哪些的文件系统得需要把该文件系统编译成模块或置入内核;

       当然Linux也支持Windows文件系统NTFST和fat,但不支持NTFS文件系统的写入;支持fat文件系统的读写。现在还有新的ext4文件系统。

       linux格式化文件命令?

       linux格式化命令

       Linux下有一条mkfs命令,相当于format,可以对磁盘进行文件系统制作操作(或者说格式化)。命令的语法为:

       mkfs-t文件系统类型/dev/设备名?

       如要把/dev/sda1格式为reiserfs格式,使用以下命令:

       mkfs-treiserfs/dev/sda1

       当然,也可以使用mkfs.fstype命令来格式化磁盘,其中的fstype为文件系统名,如reiserfs文件系统的格式化命令为mkfs.reiserfs。

       linux分区格式有哪些?

       Ext2是GNU/Linux系统中标准的文件系统。

       这是Linux中使用最多的一种文件系统,它是专门为Linux设计的,拥有极快的速度和极小的CPU占用率。

       Ext2既可以用于标准的块设备(如硬盘),也被应用在软盘等移动存储设备上。

       Ext3是Ext2的下一代,也就是保有Ext2的格式之下再加上日志功能。

       Ext3是一种日志式文件系统(JournalFileSystem),最大的特点是:它会将整个磁盘的写入动作完整的记录在磁盘的某个区域上,以便有需要时回溯追踪。

       当在某个过程中断时,系统可以根据这些记录直接回溯并重整被中断的部分,重整速度相当快。

       该分区格式被广泛应用在Linux系统中Linuxswap:它是Linux中一种专门用于交换分区的swap文件系统。

       Linux是使用这一整个分区作为交换空间。

       一般这个swap格式的交换分区是主内存的2倍。

       在内存不够时,Linux会将部分数据写到交换分区上。

       VFAT叫长文件名系统,这是一个与Windows系统兼容的Linux文件系统,支持长文件名,可以作为Windows与Linux交换文件的分区。

       可以关注《linux就该这么学》这本书。

windows和linux双系统,windows恢复出厂设置(格式化)会有什么问题吗?

       转Linux 下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux ,或者误删文件后及时补救,还是可以恢复的。

        1 、Ext2文件系统结构的简单介绍

        在Linux 所用的Ext2文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分。每个文件还有一个节点,节点中包含有文件所有者,读写权限,文件类型等信息。对于一个小于12个块的文件,在节点中直接存储文件数据块的块号。如果文件大于12个块,那么节点在12个块号之后存储一个间接块的块号,在这个间接块号所对应的块中,存储有256 个文件数据块的块号(Ext2fs中每个块号占用4 字节,这样一个块中所能存储的块号就是1024/4=256)。如果有更大的文件,那么还会在节点中出现二级间接块和三级间接块。

        2 、恢复被误删文件的方法

        大多数Linux 发行版都提供一个debugfs 工具,可以用来对Ext2文件系统进行编辑操作。不过在使用这个工具之前,还有一些工作要做。

        首先以只读方式重新挂载被误删的文件所在分区。使用如下命令:(假设文件在/usr分区)

        mount –r –n –o remount /usr -r 表示只读方式挂载;-n表示不写入/etc/mtab,如果是恢复/etc上的文件,就加上这个参数。如果系统说xxx partion busy,可以用fuser 命令查看一下是哪些进程使用这个分区上的文件:

        fuser –v –m /usr

        如果没有什么重要的进程,用以下命令停掉它们:

        fuser -k–v –m /usr

        然后就可以重新挂载这些文件系统了。

        如果是把所有的文件统一安装在一个大的/ 分区当中,可以在boot提示符下用linux single进入单用户模式,尽量减少系统进程向硬盘写入数据的机会,要不干脆把硬盘挂在别的机器上。另外,恢复出来的数据不要写到/ 上面,避免破坏那些有用的数据。如果机器上有dos/windows ,可以写到这些分区上面:

        mount –r –n /dev/hda1 /mnt/had

        然后就可以执行debugfs :(假设Linux 在 /dev/hda5)

        #debugfs /dev/hda5

        就会出现debugfs 提示符debugfs :

        使用lsdel 命令可以列出很多被删除的文件的信息:

        debugfs :lsdel

        debugfs : 2692 deleted inodes found.

        Inode Owner Mode Size Blocks Time deleted

        164821 0 100600 8192 1/ 1 Sun May 13 19 :22:46 2001

        …………………………………………………………

        36137 0 100644 4 1/ 1 Tue Apr 24 10 :11:15 2001

        196829 0 100644 149500 38/ 38 Mon May 27 13 :52:04 2001

        debugfs :

        列出的文件有很多(这里找到2692个),第一字段是文件节点号,第二字段是文件所有者,第三字段是读写权限,接下来是文件大小,占用块数,删除时间。

        然后就可以根据文件大小和删除日期判断那些是我们需要的。比如我们要恢复节点是196829的文件:

        可以先看看文件数据状态:

        debugfs :stat <196829>

        Inode : 196829 Type: regular Mode : 0644 Flags : 0x0 Version:1

        User: 0 Group: 0 Size : 149500

        File ACL: 0 Directory ACL: 0

        Links : 0 Blockcount : 38

        Fragment: Address: 0 Number : 0 Size : 0

        ctime : 0x31a9a574 —— Mon May 27 13:52:04 2001

        atime : 0x31a21dd1 —— Tue May 21 20:47:29 2001

        mtime : 0x313bf4d7 —— Tue Mar 5 08 :01:27 2001

        dtime : 0x31a9a574 —— Mon May 27 13:52:04 2001

        BLOCKS:

        594810 594811 594814 594815 594816 594817 …………………………………。

        TOTAL : 38

        然后就可以用dump指令恢复文件:

        debugfs :dump <196829> /mnt/hda/01.sav

        这样就把文件恢复出来了。退出debugfs :

        debugfs :quit

        另一种方法是手工编辑inode :

        debugfs :mi <196829>

        Mode [0100644]

        User ID [0]

        Group ID [0]

        Size [149500]

        Creation time [0x31a9a574]

        Modification time [0x31a9a574]

        Access time [0x31a21dd1]

        Deletion time [0x31a9a574] 0

        Link count [0] 1

        Block count [38]

        File flags [0x0]

        Reserved1 [0]

        File acl [0]

        Directory acl [0]

        Fragment address [0]

        Fragment number [0]

        Fragment size [0]

        Direct Block #0 [594810]

        ……………………………。

        Triple Indirect Block [0]

        使用mi指令后每次显示一行信息以供编辑,其它行可以直接按回车表示确认,把deletion time 改成0 (未删除),Link count改成1.改好后退出debugfs :

        debugfs :quit

        然后用fsck检查/dev/hda5

        fsck /dev/hda5

        程序会说找到丢失的数据块,放在lost+found里面。这个目录里的文件就是我们要的东东。

       如果你两个系统是装在两个不同硬盘上,格式化其中一个系统,唯一需要处理的是系统引导问题。

       双系统在启动的时候,会有一个界面来让你选择进入哪一个系统,这个界面称为系统引导界面,如果删除其中一个系统,可能会导致这个引导界面出问题。可以查找 修复双系统引导 相关的资料了解。

       好了,今天关于linux格式化恢复就到这里了。希望大家对linux格式化恢复有更深入的了解,同时也希望这个话题linux格式化恢复的解答可以帮助到大家。