Khôi phục tập tin bị xóa trên phân dùng Ext3 trên Linux Image Khôi phục tập tin bị xóa trên phân dùng Ext3 trên Linux

Bài viết này sẽ giới thiệu với các bạn về cách khôi phục tập tin bị xóa trên phân vùng Ext3 trên hệ điều hành Linux. Trong bài viết này chúng ta sẽ tìm hiểu về về công cụ ext3grep, các ví dụ về phục hồi file bị xóa trên phân vùng định dạng ext3 dùng ext3grep.

1. Giới thiệu về ext3grep

ext3grep là một công cụ hỗ trợ chúng ta trong việc khôi phục các tệp trên filesystem ext3. Nó là công cụ giúp chúng tra tìm hiểu nguyên nhân và khôi phục dữ liệu rất hiệu quả. Công cụ này sẽ hiển thị thông tin về các file tồn tại trên một phân vùng và có thể phục hồi các file chúng ta đã xóa.

2. Cài đặt và sử dụng ext3grep

Để có thể khôi phục các tệp đã bị xóa chúng ta cần phải cài đặt công cụ ext3grep trên hệ thống Ubuntu hoặc Debian như sau:

root@blogd-net-lab01:~# apt install ext3grep

Sau khi cài đặt thành công chúng ta có thể khôi phục các file trên filesystem ext3.

Đầu tiên chúng ta copy một đĩa bằng lệnh dd có kích thước 500MB và chúng ta cần thực hiện định dạng phân vùng ở dạng ext3 để sử dụng:

root@blogd-net-lab01:~# dd if=/dev/sda2 of=/tempfs bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 6.73321 s, 77.9 MB/s

Qua lệnh trên chúng ta đã copy thành công một đĩa có tên tempfs. Thực thi lệnh ls để kiểm tra kết quả như sau:

root@blogd-net-lab01:~# ls -l / | grep tempfs
-rw-r--r--   1 root root  524288000 Feb 11 16:23 tempfs

Tiếp thep chúng ta phải định dạng phân vùng dạng filesystem ext3 để sử dụng. Lệnh sau để định dạng phân vùng tempfs với ext3.

root@blogd-net-lab01:~# mkfs.ext3 /tempfs
mke2fs 1.44.6 (5-Mar-2019)
/tempfs contains a ext4 file system
	last mounted on / on Tue Feb 11 15:10:08 2020
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 512000 1k blocks and 128016 inodes
Filesystem UUID: 72138497-c6dd-40ca-bac1-cee72f72199c
Superblock backups stored on blocks:
	8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

Sau khi định dạng thành công phân vùng mới các phân vùng đã có thể lưu trữ dữ liệu. Chúng ta phải gắn phân vùng vào thư mục. Thực hiện tạo thư mục /mnt/test-ext3grep như sau:

root@blogd-net-lab01:~# mkdir /mnt/test-ext3grep

Gắn /mnt/test-ext3grep vào /tempfs bằng lệnh sau:

root@blogd-net-lab01:~# mount -t ext3 /tempfs /mnt/test-ext3grep/

Kiểm tra sử dụng đĩa với lệnh sau:

root@blogd-net-lab01:~# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  1.5G     0  1.5G   0% /dev
tmpfs          tmpfs     295M  1.2M  294M   1% /run
/dev/sda2      ext4       16G  5.2G  9.8G  35% /
tmpfs          tmpfs     1.5G     0  1.5G   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     1.5G     0  1.5G   0% /sys/fs/cgroup
/dev/loop0     squashfs   54M   54M     0 100% /snap/lxd/10601
/dev/loop1     squashfs   90M   90M     0 100% /snap/core/6673
/dev/loop2     squashfs   92M   92M     0 100% /snap/core/8592
/dev/loop3     squashfs   67M   67M     0 100% /snap/lxd/13300
tmpfs          tmpfs     295M     0  295M   0% /run/user/1000
/dev/loop4     ext3      477M  2.3M  449M   1% /mnt/test-ext3grep

Đầu tiên chúng ta thực hiện tạo file trong điểm gắn kết /mnt/test-ext3grep/ của phân vùng /tempfs sử dụng filesystem ext3:

root@blogd-net-lab01:~# cd /mnt/test-ext3grep/
root@blogd-net-lab01:/mnt/test-ext3grep# touch blogd-net-test{1..5}
root@blogd-net-lab01:/mnt/test-ext3grep# ls -l
total 12
-rw-r--r-- 1 root root     0 Feb 11 17:01 blogd-net-test1
-rw-r--r-- 1 root root     0 Feb 11 17:01 blogd-net-test2
-rw-r--r-- 1 root root     0 Feb 11 17:01 blogd-net-test3
-rw-r--r-- 1 root root     0 Feb 11 17:01 blogd-net-test4
-rw-r--r-- 1 root root     0 Feb 11 17:01 blogd-net-test5
drwx------ 2 root root 12288 Feb 11 16:37 lost+found
root@blogd-net-lab01:/mnt/test-ext3grep# echo "Hello blogd 1" >blogd-net-test1
root@blogd-net-lab01:/mnt/test-ext3grep# cat blogd-net-test1
Hello blogd 1

Bây giờ chúng ta thực hiện xóa một file có tên blogd-net-test1 từ điểm gắn kết /mnt/test-ext3grep:

root@blogd-net-lab01:/mnt/test-ext3grep# rm blogd-net-test1

Khôi phục dữ liệu sử dụng extgrep

Bây giờ chúng ta sẽ khôi phục file blogd-net-test1 đã xóa ở trên bằng ext3grep.

Chúng ta cần ngắt kết nối điểm gắn kết ở trên:

root@blogd-net-lab01:/mnt/test-ext3grep# cd
root@blogd-net-lab01:~# umount /mnt/test-ext3grep/

Lưu ý: Chúng ta sử dụng lệnh cd để chuyển sang thư mục khác để thao tác ngắt kết nối hoạt động, nếu không lệnh umount sẽ hiển thị lỗi.

Để xem tất cả các file tồn tại trong /tempfs chúng ta thực thi lệnh ext3grep cùng với tùy chọn --dump-name như bên dưới:

root@blogd-net-lab01:~# ext3grep --dump-name /tempfs
Running ext3grep version 0.10.2
WARNING: I don't know what EXT3_FEATURE_COMPAT_EXT_ATTR is.
Number of groups: 63
Minimum / maximum journal block: 530 / 9270
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1581440500 = Tue Feb 11 17:01:40 2020
Number of descriptors in journal: 22; min / max sequence numbers: 2 / 5
Finding all blocks that might be directories.
D: block containing directory start, d: block containing more directory entries.
Each plus represents a directory start that references the same inode as a directory start that we found previously.

Searching group 0: DD++
Searching group 1:
Searching group 2:
Searching group 3:
Searching group 4:
Searching group 5:
...
Writing analysis so far to 'tempfs.ext3grep.stage1'. Delete that file if you want to do this stage again.
Result of stage one:
  2 inodes are referenced by one or more directory blocks, 2 of those inodes are still allocated.
  1 inodes are referenced by more than one directory block, 1 of those inodes is still allocated.
  0 blocks contain an extended directory.
Result of stage two:
  2 of those inodes could be resolved because they are still allocated.
All directory inodes are accounted for!


Writing analysis so far to 'tempfs.ext3grep.stage2'. Delete that file if you want to do this stage again.
blogd-net-test1
blogd-net-test2
blogd-net-test3
blogd-net-test4
blogd-net-test5
lost+found

Để khôi phục file blogd-net-test1, chúng ta sử dụng tùy chọn --restore-all kết hợp với lệnh ext3grep như bên dưới:

root@blogd-net-lab01:~# ext3grep --restore-all /tempfs
Running ext3grep version 0.10.2
WARNING: I don't know what EXT3_FEATURE_COMPAT_EXT_ATTR is.
Number of groups: 63
Minimum / maximum journal block: 530 / 9270
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1581440500 = Tue Feb 11 17:01:40 2020
Number of descriptors in journal: 22; min / max sequence numbers: 2 / 5
Writing output to directory RESTORED_FILES/
Loading tempfs.ext3grep.stage2... done
Restoring blogd-net-test1
Restoring blogd-net-test2
Restoring blogd-net-test3
Restoring blogd-net-test4
Restoring blogd-net-test5

Sau khi khôi phục hoàn tất thì tất cả các file đã được khôi phục sẽ chứa ở thư mục RESTORED_FILES, chúng ta có thể kiểm tra xem tệp đã bị xóa có được phục hồi không:

root@blogd-net-lab01:~# cd RESTORED_FILES/
root@blogd-net-lab01:~/RESTORED_FILES# ls -l
total 8
-rw-r--r-- 1 root root   14 Feb 11 17:02 blogd-net-test1
-rw-r--r-- 1 root root    0 Feb 11 17:01 blogd-net-test2
-rw-r--r-- 1 root root    0 Feb 11 17:01 blogd-net-test3
-rw-r--r-- 1 root root    0 Feb 11 17:01 blogd-net-test4
-rw-r--r-- 1 root root    0 Feb 11 17:01 blogd-net-test5
drwx------ 2 root root 4096 Feb 11 16:37 lost+found
root@blogd-net-lab01:~/RESTORED_FILES# cat blogd-net-test1
Hello blogd 1

Như vậy chúng ta đã khôi phục thành công file đã bị xóa trên ổ đĩa sử dụng filesystem ext3.

3. Lời kết

Qua bài viết trên, giúp cho chúng ta có thể khôi phục dữ liệu trên ổ đĩa sử dụng filesystem ext3 của hệ điều hành Linux bằng công cụ ext3grep, từ đây giúp cho chúng ta có thể quản lý dử liệu và phục hồi dữ liệu khi cần thiết và công cụ ext3grep giúp chúng ta quản lý máy chủ cách tốt hơn.