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ả 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:
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 Procees
và Quit
.
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.
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:
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:
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.
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:
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.txt
và blogd_net_05.txt
.
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.