Created
July 10, 2024 10:27
-
-
Save fiddyschmitt/4c9356bd464d53a9c6b25f3095570a41 to your computer and use it in GitHub Desktop.
Restore image onto oversubscribed drive
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
There's a good post over at [brashear.me][1] which creates a btrfs partition stored as a file. The partition supports compression and can be used by ddrescue transparently. The blog post is reproduced below, should it ever become unavailable. | |
> As disk sizes explode, I've found myself having to mirror disks which | |
> I don't have enough storage for. My tool of choice is ddrescue. | |
> However, it doesn't support compression because it needs to be able to | |
> seek through the output as it rescues data. A solution I've found is | |
> to create a sparse file, format it btrfs, and mount it with the | |
> compression option. This allows ddrescue to operate normally, | |
> while giving me fast + decent compression. | |
> | |
> Create a sparse file which is larger than your source disk: | |
> | |
> dd if=/dev/zero bs=1 count=0 seek=4T of=image-repository.img | |
> | |
> Mount the file as a loop device: | |
> | |
> sudo losetup /dev/loop0 image-repository.img | |
> | |
> Partition the loop device: | |
> | |
> sudo gdisk /dev/loop0 | |
> | |
> Create new GPT by pressing `o` followed by `y` | |
> | |
> | |
> Create new partition by pressing `n` and pressing enter a few times to | |
> accept defaults. | |
> | |
> Write the table, by pressing `w` then `y` | |
> | |
> Reread partitions from the loop device: | |
> | |
> sudo partprobe /dev/loop0 | |
> | |
> Format the loop0p1 partition: | |
> | |
> sudo mkfs.btrfs /dev/loop0p1 | |
> | |
> Mount the filesystem with compression enabled. Valid compression options are | |
> `zlib, lzo, zstd`: | |
> | |
> mkdir /mnt/img-repo | |
> sudo mount -o compress=zstd /dev/loop0p1 /mnt/img-repo | |
> | |
> Set the c attr on the mount directory: | |
> | |
> sudo chattr +c /mnt/img-repo | |
> | |
> Now, when you create a `ddrescue` image inside of the `/mnt/img-repo/` | |
> folder, it will be transparently compressed! | |
At a later date, you can access your ddrescue'd image using: | |
losetup --find --show image-repository.img | |
partprobe /dev/loopX //where X is the output of the previous command | |
mkdir /mnt/img-repo | |
mount -o compress=zstd /dev/loopXp1 /mnt/img-repo | |
chattr +c /mnt/img-repo | |
cd /mnt/img-repo | |
And you can inspect the contents of the ddrescue'd image using: | |
losetup --read-only --find --show /mnt/img-repo/disk.img | |
mkdir /mnt/recovered_files/ | |
mount /dev/loopXp1 /mnt/recovered_files/ //where X is the output of the previous command | |
[1]: https://brashear.me/blog/2017/11/14/how-to-create-a-compressed-ddrescue-image/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment