Khôi phục dữ liệu trên Linux dùng TestDisk Image Khôi phục dữ liệu trên Linux dùng TestDisk

Bài viết này sẽ hướng dẫn các bạn khôi phục dữ liệu sử dụng công cụ TestDisk trên hệ điều hành Linux. Trong bài viết này sẽ giới thiệu với các bạn về công cụ TestDisk, ví dụ cách khôi phục file/thư mục, khôi phục partition bị xóa nhầm, khôi phục partition table trên bản phân phối CentOS 7 từ đó giúp cho chúng ta có thể tự tìm hiểu và tự học Linux cơ bản một cách dễ dàng hơn.

1. Giới thiệu công cụ TestDisk

TestDisk là một công cụ phục hồi dữ liệu mã nguồn mở, được sử dụng để khôi phục file/thư mục, khôi phục partition bị xóa nhầm, khôi phục partition table,... Công cụ này được viết bằng ngôn ngữ lập trình C bởi Christophe Granier và được cấp giấy phép GNU/GPLv2. TestDisk là một công cụ đa nền tảng và chạy trên hầu hết các hệ điều hành hiện có: Linux, Windows, macOS, FreeBSD, OpenBSD và NetBSD.

TestDisk có thể thực hiện một số chức năng quan trọng sau đây:

  • TestDisk có thể sửa chữa bảng phân vùng bị hỏng.
  • Khôi phục liền mạch một phân vùng đĩa bị xóa.
  • Nó có thể sao chép các file bị xóa hoặc bị hỏng trên Linux (ext2, ext3 và ext4).

TestDisk có thể tìm được các partition bị mất cho tất cả các loại file system sau:

  • BeFS ( BeOS )
  • BSD disklabel ( FreeBSD/OpenBSD/NetBSD )
  • CramFS, Compressed File System
  • DOS/Windows FAT12, FAT16 and FAT32
  • HFS, HFS+ and HFSX, (Hierarchical File System)
  • JFS, (IBM's Journaled File System)
  • Linux ext2 and ext3
  • Linux LUKS encrypted partition
  • Linux RAID:
    • RAID 1
    • RAID 4
    • RAID 5
    • RAID 6
  • Linux Swap (versions 1 and 2)
  • LVM và LVM2 (Linux Logical Volume Manager)

2. Cài đặt TestDisk

Nếu công cụ TestDisk không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt TestDisk như sau:

  • Đối với bản phân phối Debian/Ubuntu:

Chạy lệnh sau để có thể cài đặt TestDisk :

root@ubuntuserver:~# apt-get install testdisk
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 libjansson4
  liblua5.2-0 linux-headers-5.0.0-27 linux-headers-5.0.0-27-generic linux-image-5.0.0-27-generic
  linux-modules-5.0.0-27-generic linux-modules-extra-5.0.0-27-generic ssl-cert
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  libjpeg-turbo8 libjpeg8
The following NEW packages will be installed:
  libjpeg-turbo8 libjpeg8 testdisk
0 upgraded, 3 newly installed, 0 to remove and 56 not upgraded.
Need to get 464 kB of archives.
After this operation, 1,933 kB of additional disk space will be used.
...

Sau khi cài đặt lệnh TestDisk chúng ta chạy lệnh sau để kiểm tra TestDisk đã cài thành công hay chưa:

root@ubuntuserver:~# testdisk -v
TestDisk 7.0, Data Recovery Utility, April 2015
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Version: 7.0
Compiler: GCC 8.2
ext2fs lib: 1.44.6, ntfs lib: libntfs-3g, reiserfs lib: none, ewf lib: none, curses lib: ncurses 6.1
OS: Linux, kernel 5.0.0-29-generic (#31-Ubuntu SMP Thu Sep 12 13:05:32 UTC 2019) x86_64
  • Đối với với bản phân phối RHEL/CentOS:

Để có thể cài TestDisk trên CentOS trước hết chúng ta phải bật kho EPEL như bên dưới:

[root@localhost ~]# yum install epel-release
Loaded plugins: fastestmirror
Determining fastest mirrors
epel/x86_64/metalink                                                                                    | 6.4 kB  00:00:00
 * base: mirrors.viethosting.com
 * centos-sclo-rh: mirrors.viethosting.com
 * centos-sclo-sclo: mirrors.viethosting.com
 * epel: my.fedora.ipserverone.com
 * extras: mirrors.viethosting.com
 * updates: mirrors.viethosting.com
...

Sau khi bật kho EPEL chúng ta chạy lệnh sau để cài đặt TestDisk:

[root@localhost ~]# yum install testdisk
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.viethosting.com
 * centos-sclo-rh: mirrors.viethosting.com
 * centos-sclo-sclo: mirrors.viethosting.com
 * epel: my.fedora.ipserverone.com
 * extras: mirrors.viethosting.com
 * updates: mirrors.viethosting.com
...

Chạy lệnh bên dưới để kiểm ra xem TestDisk được cài đặt thành công hay chưa:

[root@localhost ~]# rpm -qi testdisk
Name        : testdisk
Version     : 7.1
Release     : 1.el7
Architecture: x86_64
Install Date: Wed 16 Oct 2019 09:05:03 PM +07
Group       : Applications/System
Size        : 1604264
License     : GPLv2+
Signature   : RSA/SHA256, Sat 13 Jul 2019 02:01:34 AM +07, Key ID 6a2faea2352c64e5
Source RPM  : testdisk-7.1-1.el7.src.rpm
Build Date  : Sat 13 Jul 2019 12:37:39 AM +07
Build Host  : buildvm-19.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : https://www.cgsecurity.org/wiki/TestDisk
Bug URL     : https://bugz.fedoraproject.org/testdisk
Summary     : Tool to check and undelete partition, PhotoRec recovers lost files
Description :
Tool to check and undelete partition. Works with FAT12, FAT16, FAT32,
NTFS, ext2, ext3, ext4, btrfs, BeFS, CramFS, HFS, JFS, Linux Raid, Linux
Swap, LVM, LVM2, NSS, ReiserFS, UFS, XFS.
PhotoRec is a signature based file recovery utility. It handles more than
440 file formats including JPG, MSOffice, OpenOffice documents.
  • Đối với bản phân phối Fedora:

    dnf install testdisk
    
  • Đối với bản phân phối Arch Linux:

    pacman -S testdisk
    

Lưu ý: Nếu không tìm thấy gói phù hợp cho bản phân phối Linux chúng ta có thể tải xuống TestDisk từ trang web của nó.

3. Sử dụng TestDisk

3.1. Sử dụng TestDisk hiển thị các phân vùng

Chúng ta có thể sử dụng lệnh TestDisk cùng với tùy chọn /list để có thể hiển thị danh sách các phân vùng trên hệ thống của chúng ta:

[root@localhost ~]# testdisk /list
TestDisk 7.1, Data Recovery Utility, July 2019
Christophe GRENIER <grenier@cgsecurity.org>
https://www.cgsecurity.org
Please wait...
Disk /dev/sda - 17 GB / 16 GiB - CHS 16384 64 32
Sector size:512
Model: VMware Virtual disk, FW:2.0

Disk /dev/sdb - 17 GB / 16 GiB - CHS 16384 64 32
Sector size:512
Model: VMware Virtual disk, FW:2.0

Disk /dev/mapper/cl-root - 14 GB / 13 GiB - 28090368 sectors
Sector size:512
Model: VMware Virtual disk, FW:2.0

Disk /dev/mapper/cl-swap - 1719 MB / 1640 MiB - 3358720 sectors
Sector size:512
Model: VMware Virtual disk, FW:2.0
...

Qua kết quả trên chúng ta thấy các phân vùng trên hệ thống của chúng ta được hiển thị.

3.2. Sử dụng testdisk để khôi phục file đã xóa

Ví dụ: Giả sử ban đầu chúng ta thực hiện tạo thư mục test_blogd và các file có tên là blogd_net_01.txt, blogd_net_02.txt, blogd_net_03.txt, blogd_net_04.txt, blogd_net_05.txt. Sao khi thực hiện tạo xong chúng ta thực hiện xóa các file blogd_net_02.txt, blogd_net_03.txt, blogd_net_05.txt, như sau:

[root@localhost ~]# cd web/
[root@localhost web]# mkdir test_blogd
[root@localhost web]# echo "Hello Blogd.net 1" > blogd_net_01.txt
[root@localhost web]# echo "Hello Blogd.net 2" > blogd_net_02.txt
[root@localhost web]# echo "Hello Blogd.net 3" > blogd_net_03.txt
[root@localhost web]# echo "Hello Blogd.net 4" > blogd_net_04.txt
[root@localhost web]# echo "Hello Blogd.net 5" > blogd_net_05.txt
[root@localhost web]# cat blogd_net_02.txt
Hello Blogd.net 1
[root@localhost web]# cat blogd_net_03.txt
Hello Blogd.net 3
[root@localhost web]# cat blogd_net_05.txt
Hello Blogd.net 5
[root@localhost web]# rm -rf blogd_net_02.txt
[root@localhost web]# rm -rf blogd_net_03.txt
[root@localhost web]# rm -rf blogd_net_05.txt
[root@localhost web]# ls -l
total 8
-rw-r--r--. 1 root root 18 Oct 22 23:43 blogd_net_01.txt
-rw-r--r--. 1 root root 18 Oct 22 23:43 blogd_net_04.txt
drwxr-xr-x. 2 root root  6 Oct 22 23:42 test_blogd

Bước 1: Chạy lệnh TestDisk để thực hiện tạo một file testdisk.log mới cho hệ thống của chúng ta:

Sử dụng lệnh sau để thực thi công cụ TestDisk:

[root@localhost ~]# testdisk

Sau khi chạy lệnh trên thì kết quả sẽ hiện thị như hình bên dưới:

Kết quả của việc thực thi lệnh testdisk

Kết quả sẽ cung cấp cho chúng ta một mô tả về tiện ích của công cụ TestDisk. Cho phép chúng ta thực hiện tạo một file testdisk.log.

Sau khi chạy TestDisk màn hình xuất hiện yêu cầu tạo file log để ghi lại các thông tin về quá trình chạy TestDisk với ba phương án:

  • Create: tạo một file log mới.
  • Append: nối tiếp thông tin về lần chạy TestDisk này vào một file log đã tạo lần trước.
  • No Log: không ghi lại các thông tin về quá trình chạy TestDisk.

Chúng ta sử dụng phím mũi tên để di chuyển vùng sáng đến phương án cần thiết rồi nhấn Enter.

Chọn tùy chọn Create vì chúng ta cần tạo file log mới. Tùy thuộc vào bảo mật hệ thống, máy tính có thể nhắc mật khẩu sudo để tiến hành khôi phục.

Bước 2: Chọn ổ đĩa cần khôi phục

Sau khi chúng ta chọn Create thì tiện ích TestDisk sẽ hiển thị một danh sách các ổ lưu trữ được kết nối với hệ thống của chúng ta. Hệ thống hiển thị tổng dung lượng lưu trữ của mỗi ổ đĩa và không gian trống của nó. Chọn ổ đĩa nơi file của chúng ta được lưu trữ, sau đó sử dụng các phím mũi tên phải và trái để điều hướng và chọn Proceed. Tiếp theo, nhấn nút ENTER . Trong ví dụ này chúng ta chọn ổ đĩa /dev/sdb như hình bên dưới:

Chọn ổ đĩa cần khôi phục file

Tùy thuộc vào quyền bảo mật hệ thống của chúng ta có thể không hiển thị một số ổ đĩa. Đối với những trường hợp như vậy chúng ta chọn Sudo option bên cạnh các tùy chọn ProceesQuit.

Mở Sudo và nhập mật khẩu của bạn. Sau khi xác minh mật khẩu thành công, hệ thống sẽ hiển thị tất cả các ổ đĩa đính kèm với tổng dung lượng lưu trữ của mỗi ổ đĩa và không gian trống của chúng.

Bước 3: Chọn bảng phân vùng

Khi chúng ta đã thực hiện chọn ổ đĩa cần khôi phục file thì tiếp theo là xác định bảng phân vùng chính xác. Trong bước này thì hệ thống sẽ tự động dự đoán và làm nổi bật sự lựa chọn bảng phân vùng tốt nhất đối với ổ đĩa của chúng ta.

Lựa chọn bảng phân vùng

Tíếp theo chúng ta thức hiện nhấp phím ENTER để tiếp tục. Kết quả sẽ xuất hiện như hình bên dưới:

Chọn tùy chọn cho ổ đĩa

Sau khi chỉ định đúng ổ đĩa và loại phân vùng, cửa sổ màn hình tiếp theo sẽ hiển thị danh sách các tùy chọn khôi phục. Chúng ta có thể chọn một trong các tùy chọn màn hình phù hợp với như cầu. Trong ví dụ này chúng ta cần khôi phục một tệp đã bị xóa do đó chúng ta thực hiện chọn tùy chọn Advance.

Khi đã chọn tùy chọn Advance thì màn hình sẽ hiển thị kết quả như bên dưới:

Chọn phân vùng ổ đĩa file đã xóa

Kết quả trong hình chúng ta lựa phân vùng nơi chứa file bị xóa. Chọn phân vùng cần thiết tiếp theo di chuyển vào tùy chọn Undelete và nhấn ENTER để tiếp tục. Trong ví dụ này chúng ta có 2 phân vùng trên ổ đĩa và thực hiện chọn phân vùng 1 vì file bị xóa nằm tại phân vùng này.

Bước 4: Kiểm tra thư mục nguồn đã xóa

Khi chúng ta chọn tùy chọn Undelete thì tiện ích TestDisk hiển thị các thư mục hệ thống cho tất cả các phân vùng, chúng ta cần di chuyển đến thư mục cụ thể nơi chứa các file mà chúng ta đã xóa.

Kiểm tra các file đã xóa

Qua hình ảnh trên chúng ta thấy các file chúng ta đã xóa lúc nảy điều được hiển thị và được tô màu đỏ.

Lưu ý: Chúng ta sử dụng phím mũi tên trái ⬅️ phải ➡️ để di chuyển thư mục chứ file cũng như quay lại vị trí ban đầu.

Bước 5: Khôi phục file đã xóa

Khi đã tìm thấy file bị mất của chúng ta trong danh sách. Chúng ta di chuyển xuống các file cần khôi phục. Trong ví dụ này chúng ta sẽ sao chép các file blogd_net_02.txt, blogd_net_03.txt, blogd_net_05.txt bằng cách bấm phím c trên bàn phím. File này sẽ được khôi phục đến vị trí chúng ta sẽ chỉ định. Ngay sau khi ấn phím c thì tiện ích TestDisk sẽ hiển thị màn hình sau để chúng ta có thể chỉ định nơi khôi phục file:

Khôi phục file

Chọn thư mục chứa file và nhấn phím c để thực hiện sao chép các file đã bị xóa vào thư mục. Trong ví dụ này chúng ta chọn thư mục /root/web/test-blogd là nơi chứ các file blogd_net_02.txt. Tương tự như việc sao chép file blogd_net_02.txt chúng ta thực hiện để sao chép file blogd_net_03.txtblogd_net_05.txt.

Sao chép thành công

Chúng ta nhận đươc thông báo sao chép thành công như trên.

Để thoát khỏi tiện ích TestDisk chúng ta chọn quit và nhấn ENTER. Việc này sẽ giúp chúng ta trở lại màn hình trước đó. Chọn quit và nhấn ENTER cho đến khi có thể thoát hoàn toàn khỏi tiện ích TestDisk.

Sau khi chúng ta thoát khỏi tiện ích TestDisk chúng ta thực hiện lệnh để kiểm tra xem cái file blogd_net_02.txt, blogd_net_03.txt, blogd_net_05.txt được sao chép thành công vào thự mục /root/web/test-blogd bằng cách như sau:

[root@localhost ~]# cd web/test_blogd/
[root@localhost test_blogd]# ls -l
total 0
-rw-r--r--. 1 root root 18 Oct 22 23:53 blogd_net_02.txt
-rw-r--r--. 1 root root 18 Oct 22 23:53 blogd_net_03.txt
-rw-r--r--. 1 root root 18 Oct 22 23:53 blogd_net_05.txt
[root@localhost test_blogd]# cat blogd_net_02.txt
Hello Blogd.net 2
[root@localhost test_blogd]# cat blogd_net_03.txt
Hello Blogd.net 3
[root@localhost test_blogd]# cat blogd_net_05.txt
Hello Blogd.net 5

Qua kết quả trên cho chúng ta thấy chúng ta đã thực hiện khôi phục thành công các file đã bị xóa trước đó.

3. Lời kết

Qua bài trên, giúp cho chúng ta hiểu hơn về công cụ TestDisk trên hệ điều hành Linux. Từ đây giúp cho chúng ta khắc phục được các sự cố khi xóa nhầm một file nào đó, hay một file bị lỗi bằng việc khôi phục file sử dụng công cụ TestDisk như trên.