Linuxを使用中に意図せずファイルを削除してしまい、頭の中が真っ青になった。
そんなときはGoogle先生に頼るのが常であるが、lsofやextundeleteを紹介している記事が多い上に復元できないケースがある。また、誤ったファイル削除は初心者が犯しやすいミスであり、当然パーティション等への理解が十分でない場合も考えられる。
そこで今回は同じ初心者としてファイル復元を実際に行った手順を記載しようと思う。
概要
条件
- ext4ファイルシステムを使用するLinux
用意するもの
- LinuxのブータブルUSBメモリ
または
- 別のLinux機+HDD外付けケース
手順例
ここではUSERを自身のユーザー名、DEVICEを復元したいデバイス名に置き換えること。(筆者の場合、デバイス名は/dev/sdb1)
sudo pacman -S ext4magic
// ツールのインストールsudo fdisk -l
// 復元するファイルのあるデバイス名を確認sudo ext4magic DEVICE -m -a $(date +%s -d '2020-03-28 18:00')
sudo chown -R USER:USER ./RECOVERDIR/
// 上のコマンドをスーパーユーザーで行った場合sudo fsck DEVICE
解説
用意するものについて
ファイルを復元するためには、復元を行いたいデバイスがアンマウント可能な状態である必要がある。ユーザーファイルを置くパーティションを基本的に分割していることはないと思う。
その場合は別のLinuxから復元操作を行う必要がある。そこで必要となるのが上記のツールだ。
Live USBを作成すればHDD/SSDを取り外すことなく操作ができる。
また、外付けHDD/SSDケースで接続すれば別の機体から操作が可能だ。
Linux Live USBの作成ツール
Windows/Mac/Linuxで利用できる書き込みツールとしてEtcherを紹介する。
Live USBは標準で保存領域を持たないためインストールしたファイルは再起動後に失われる。Live USBを常備して置きたい場合は保存領域の確保をオプションとして行えるUnetbootinもお薦めだ。
また、使用するUSBメモリは4GB程度の容量でも作成できることを追記しておく。
デバイス名の確認
マウントされているデバイス一覧はsudo fdisk -l
で確認できる。ここではスーパーユーザーで実行しなければ表示されない可能性がある。
以下に出力例を載せる。
ディスク /dev/sdb: 238.49 GiB, 256060514304 バイト, 500118192 セクタ
ディスク型式: SAMSUNG MZ7TY256
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x8b02e275デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ
/dev/sdb1 2048 463979025 463976978 221.2G 83 Linux
/dev/sdb2 463979026 500103449 36124424 17.2G 82 Linux スワップ / Solaris
ここで確認するべきはデバイス名であり、上の場合は/dev/sdb1に該当する。
ext4magicのオプションと実行
手順3ではファイル復元ツールext4magicを用いてファイルを復元している。このツールはextundeleteという他でも多く紹介されているツールのフォークであり、より高性能な復元を期待できる。ツール名から自明であるが、EXT3/EXT4といった主にLinuxに使われるファイルシステムにのみ対応しており、WindowsOSに用いられるNTFSやUSBメモリに用いられるFAT32に対しては使うことができない。
標準でインストールされていることが少ないため、各OSのパッケージマネージャー等からインストールする必要がある。
sudo apt install ext4magic // 例1
sudo pacman -S ext4magic // 例2
コマンドラインオプションに関しては、sudo ext4magic DEVICE -m -a $(date +%s -d '時刻')
を定型文として記憶して貰って構わない。(時刻は2020-04-01 14:00
のように指定する)-a
はafterを指し、指定した時刻以降に削除されたファイルを復元する。
また、上では取り扱っていないが-b
(before)というオプションで指定時刻以前の削除ファイルを指定できる。ファイル削除後に多くの処理を行い、時間が経ってしまった場合は復元時間の短縮に繋がるので使用すると良いかもしれない。
復元結果はRECOVERDIRという名前のフォルダ下に保存される。
ext4magicを紹介するサイトごとにこのコマンドをスーパーユーザー下で実行するか異なっている。今回の場合スーパーユーザーでの復元以外の試行は行っていないが、一般ユーザーで実行しても良かった可能性がある。
スーパーユーザーで実行した場合、作成されるRECOVERDIRの所有者はrootとなり一般ユーザーではフォルダ下の閲覧/移動(読み書き)ができない。この問題に陥ったらスーパーユーザーで所有者を一般ユーザーに移譲する必要がある。この操作はsudo chown -R USER:USER ./RECOVERDIR/
で実現できる。(USER
は自身のユーザー名)
ファイルシステムの検査/修復
ext4magicのファイル復元による副作用として、指定したデバイスのファイルシステムが破損する場合がある。(筆者も実行後Linuxが起動しなくなった)
この対策としてfsckというファイルシステムの検査ツールを利用する。コマンドはsudo fsck /dev/sdb1
と単純でスーパーユーザー下でデバイスを指定するだけで良い。
余談ではあるが、NTFSというファイルシステムはntfsfixというツールで同様に検査/修復が可能だ。
本記事は初めに解決法を紹介し、後に詳しい解説を載せるといった英語圏の文章構成に倣った記法を採用してみた。
近年、専門的な記事を扱うQiitaでも日本人特有の叙述的な最後にまとめとして解決方法を載せる記事が多くなった印象である。本記事の作成は【前置き/問題/試行/解決/まとめ】といった順序で記載するよりも多くの労力を用いたように感じる。
多少大変ではあったが、解説記事は今回の形式で書いていこうと思う。
コメント