「SquashFS によるフルシステムバックアップ」の版間の差分
ナビゲーションに移動
検索に移動
(前文の情報を更新) |
(他言語へのリンクを追加) |
||
(2人の利用者による、間の10版が非表示) | |||
1行目: | 1行目: | ||
[[Category:バックアップ]] |
[[Category:バックアップ]] |
||
[[en:Full system backup with SquashFS]] |
[[en:Full system backup with SquashFS]] |
||
+ | [[es:Full system backup with SquashFS]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|tar によるフルシステムバックアップ}} |
{{Related|tar によるフルシステムバックアップ}} |
||
21行目: | 22行目: | ||
|} |
|} |
||
+ | == 長所と短所 == |
||
− | {{Warning|SquashFS は [[アクセス制御リスト]] をサポートしていません[https://www.kernel.org/doc/html/latest/filesystems/squashfs.html#todo-list]}} |
||
+ | 長所: |
||
− | == Overview == |
||
+ | * パーティションなし、必要なサイズの推測なし。 |
||
− | It's possible to make compressed read-only backup archives of whole filesystems in the [[SquashFS]] format. It is convenient since you can mount it and find/grep/cp/tree in it without decompressing the whole archive. Backup and retrieval may take less time compared to tar, but modifying an existing archive is impossible. |
||
+ | * [[ファイルシステム#Read-only ファイルシステム|SquashFS]] ほとんどのレスキューディスクでサポートされています。 |
||
+ | * [https://en.wikipedia.org/wiki/Tar_(computing)#Random_access ランダムアクセス] で、プレーンな {{ic|mount}} を使用する。 |
||
+ | * 重複ファイルはデフォルトで削除されます ({{ic|no-duplicates}} フラグがオンでない限り。) |
||
+ | 短所: |
||
+ | * すべての [[ACL]] が失われます。 |
||
− | == ライブ CD/DVD/USB の準備 == |
||
+ | * Windows <sup>1</sup> からアクセスできません。 |
||
+ | * 追加可能ですが、そこから除去することはできません。 |
||
+ | * 他の目的でディスクを使用するには、バックアップ <sup>2</sup> を破棄する必要があります。 |
||
+ | {{Note| |
||
− | SquashFS アーカイブを作成するには {{Pkg|squashfs-tools}} がインストールされているライブ CD/DVD/USB を用意する必要があります。[[Archiso#ライブメディアの設定]]を読んで {{ic|packages.x86_64}} を設定して {{Pkg|squashfs-tools}} がインストールされているライブ CD/DVD/USB を作成してください。 |
||
+ | # [https://github.com/AgentD/squashfs-tools-ng squashfs-tools-ng] は SquashFS イメージファイルをサポートしているかもしれませんが、Windows 自身はパーティションレスドライブを全くサポートしていません。 |
||
− | == ライブ環境でバックアップ == |
||
+ | # [[wikipedia:Swim ring|swim ring]] が必要なときに [[wikipedia:Lifebuoy|lifebuoy]] を''掴まないでください'' ファイル共有とバックアップは別々のディスクにして下さい。[https://askubuntu.com/a/594861 適切なバックアップハードウェアを購入する] |
||
+ | }} |
||
− | + | == バックアップドライブを準備する == |
|
+ | {{Warning|1=<nowiki/> |
||
− | {{Note|以下は sdb1 が EFI パーティションで sdb2 がルートパーティションの EFI-grub による Arch 環境の例です。}} |
||
+ | * バックアップドライブ上のすべてのデータが失われます。 |
||
+ | * 誤ったデバイスファイルを指定すると、マシン上のすべてのデータが失われる可能性があります。}} |
||
+ | # すべてのパーティション {{ic|/dev/sdBN}} を消去してから、パーティションテーブル {{ic|/dev/sdB}} を [[デバイスファイル#wipefs|wipefs]] で消去します。 |
||
− | # fsck /dev/sdb2 |
||
+ | # すべてのライトキャッシュを同期する {{ic|#sync}} |
||
− | # fsck /dev/sdb1 |
||
+ | # パーティションテーブルの変更をOSに通知する {{ic|#partprobe}} |
||
− | # mount /dev/sdb2 /mnt |
||
+ | # 不正なブロックをチェックする。 |
||
− | # mount /dev/sdb1 /mnt/boot/efi |
||
+ | #* バックアップドライブが [[SSD]] の場合は、[[S.M.A.R.T.]] を使用します。 |
||
− | # /somewhere/mksquashfs.sh SOURCE_DIRECTORY BACKUP_ARCHIVE_DIRECTORY |
||
+ | #* バックアップドライブが HDD の場合は、 [[badblocks]] を使用します。 |
||
+ | == ライブメディアの準備 == |
||
− | スクリプトの中身: |
||
+ | [[インストールガイド#インストールメディアの準備]] または [[archiso]] を /dev/sdL にインストールします。 |
||
− | {{hc|/somewhere/mksquashfs.sh| |
||
− | #!/usr/bin/env bash |
||
+ | {{Note|SquashFS ファイルシステムを作成するには、[https://archlinux.org/download/ official Arch Linux installation image] に含まれている{{Pkg|squashfs-tools}} が必要です。}} |
||
− | # Sanity |
||
− | if [ $# -ne 2 ]; then |
||
− | echo "invoke: mksquashfs.sh SOURCE_DIRECTORY BACKUP_ARCHIVE_DIRECTORY" |
||
− | exit 1 |
||
− | fi |
||
− | echo -ne "\n\nHave you fsck'd? " |
||
− | read |
||
+ | == バックアップ == |
||
− | # Backup |
||
+ | |||
− | mksquashfs \ |
||
+ | [[インストールガイド#ライブ環境の起動]] |
||
− | "$1" "$2/$(date +%Y%m%d_%a).sfs" \ |
||
+ | |||
− | -comp gzip \ |
||
+ | {{Tip|バックアップドライブとライブメディアの両方に十分な USB ポートがない場合。 |
||
+ | # ライブメディアを起動する |
||
+ | # ブートローダーのメニューが表示されたら、'e' を押します。 |
||
+ | # [[カーネルパラメータ]] に [https://gitlab.archlinux.org/archlinux/archiso/-/blob/d5102724fbacb8f980db346e0caa8b5a85d9edb6/docs/README.bootparams#L26 copytoram] を追加する。 |
||
+ | # {{ic|# udisksctl power-off -b /dev/sdL}} を実行します。(必要 [[Archiso#Prepare a custom profile|archiso releng]] 、 {{Pkg|udisks2}} 、 [[Archiso#Selecting packages|packages.x86_64]]]) |
||
+ | # ライブメディアの回転が止まったことを確認し、切断する。}} |
||
+ | |||
+ | バックアップしたいファイルシステムをマウントします。(例:/dev/sdSRC を /mnt に) |
||
+ | |||
+ | {{bc|# fsck /dev/sdSRC |
||
+ | # mount -o ro /dev/sdSRC /mnt}} を実行します。 |
||
+ | |||
+ | バックアップ ([https://github.com/Un1Gfn/archiso/blob/master/mksquashfs.sh サンプルスクリプト]) |
||
+ | |||
+ | {{Warning|1=<nowiki/> |
||
+ | * バックアップドライブのデータはすべて失われます。 |
||
+ | * 不正なデバイスファイルを指定した場合、マシン上の全データが失われる可能性があります。 |
||
+ | }} |
||
+ | |||
+ | {{bc|# mksquashfs /mnt /dev/sdB \ |
||
+ | -not-reproducible \ |
||
-xattrs \ |
-xattrs \ |
||
+ | -wildcards \ |
||
+ | -noappend \ |
||
-progress \ |
-progress \ |
||
-mem 5G \ |
-mem 5G \ |
||
− | -wildcards \ |
||
-e \ |
-e \ |
||
+ | var/cache/pacman/pkg \ |
||
− | boot/efi \ |
||
+ | var/lib/pacman/sync \ |
||
− | boot/grub \ |
||
+ | var/log/journal \ |
||
− | boot/initramfs-linux"*".img |
||
+ | boot/efi \ |
||
− | }} |
||
+ | boot/grub \ |
||
+ | boot/initramfs-linux"*".img \ |
||
+ | boot/vmlinuz-linux}} |
||
+ | ;; -not-reproducible:バックアップ速度を若干上げる |
||
− | == リストア (解凍) == |
||
+ | ;; -noappend:上書き |
||
+ | ;; -mem:mksquashfsに RAM を付与 |
||
+ | ;; -e:除外するディレクトリ/ファイルのリスト |
||
+ | == QEMU でのバックアップのテスト (任意) == |
||
− | {{Warning|以下のスクリプトは未確認です。まだ使わないでください。}} |
||
+ | 許可を与える |
||
− | {{bc|1= |
||
− | #!/bin/bash |
||
+ | $ sudo chown $USER:$USER /dev/sdB |
||
− | # Path to extract files |
||
− | target=/mnt |
||
+ | QEMU を起動する |
||
− | # Path to backup SquashFS archive file |
||
− | archive=/somewhere/backup.sfs |
||
+ | {{Note|[[カーネル]] と [[initramfs]] はホストマシンのものが使用されます。}} |
||
− | unsquashfs -stat $archive |
||
+ | |||
− | unsquashfs -force -dest $target $archive |
||
+ | {{bc|1= |
||
+ | $ qemu-system-x86_64 \ |
||
+ | -kernel /boot/vmlinuz-linux \ |
||
+ | -append "root=/dev/sdB ro loglevel=3 init=/usr/lib/systemd/systemd" \ |
||
+ | -initrd /boot/initramfs-linux-fallback.img \ |
||
+ | -drive file=/dev/sdB,index=0,media=disk,format=raw \ |
||
+ | -m ''virtual_machine_ram_in_MiB'' \ |
||
+ | --enable-kvm \ |
||
+ | -cpu host |
||
}} |
}} |
||
+ | == バックアップの検査 (オプション) == |
||
− | {{Note|リストア後にシステムを起動可能にするには: |
||
+ | バックアップの日付を取得する |
||
− | # fstab を修正 |
||
+ | |||
− | # arch-chroot |
||
+ | # date --date=@"$(unsquashfs -mkfs-time /dev/sdB)" |
||
− | ## {{ic|mkinitcpio -p linux}} |
||
+ | |||
− | ## {{ic|grub-install}} |
||
+ | スーパーブロックの詳細情報 |
||
− | ## {{ic|grub-mkconfig}} |
||
+ | |||
+ | # unsquashfs -stat /dev/sdB |
||
+ | |||
+ | チェックサム |
||
+ | |||
+ | {{Accuracy|{{ic|unsquashfs -stat}} and {{ic|df}} gives different sizes}} |
||
+ | |||
+ | {{bc|1= |
||
+ | # COUNT="$(unsquashfs -stat /dev/sdB {{!}} grep -F 'Filesystem size' {{!}} cut -d' ' -f3)" |
||
+ | # echo "$COUNT Byte" |
||
+ | # numfmt --to=iec-i "$COUNT" |
||
+ | # head -c "$COUNT" /dev/sdB {{!}} sha1sum {{!}} tee -a sha1sum.txt |
||
}} |
}} |
||
+ | == バックアップからファイルを取得する == |
||
− | == リストア (マウントとコピー) == |
||
− | {{Warning|以下のスクリプトは未確認です。まだ使わないでください。}} |
||
− | # |
+ | # mount /dev/sdB /mnt |
+ | # cp /mnt/''path/to/file'' ''/path/to/destination'' |
||
− | # {{ic|cp /mnt/somefile /somewhere/damaged-somefile}} |
||
+ | |||
+ | == バックアップの復元 == |
||
+ | |||
+ | {{Note|1=<nowiki/> |
||
+ | リストア後にシステムを起動できるようにする。 |
||
+ | * [[fstab]] を修正する |
||
+ | * arch-chroot |
||
+ | ** initramfs の [[mkinitcpio#イメージ作成とアクティベーション|再生成]] を行う。 |
||
+ | ** [[Arch ブートプロセス#ブートローダー|ブートローダー]] のインストールと設定 |
||
+ | }} |
2023年5月20日 (土) 17:58時点における最新版
関連記事
ファイルシステム全体の圧縮バックアップアーカイブを SquashFS フォーマットで作成することができます。ランダムアクセスが可能なため、バックアップや取り出しに比較的時間がかかりませんが、追記以外の改変はまだできません。
デバイスファイル | 説明 |
---|---|
/dev/sdB | バッアップドライブ |
/dev/sdL | ライブメディア |
/dev/sdSRC | バックアップするドライブ |
目次
長所と短所
長所:
- パーティションなし、必要なサイズの推測なし。
- SquashFS ほとんどのレスキューディスクでサポートされています。
- ランダムアクセス で、プレーンな
mount
を使用する。 - 重複ファイルはデフォルトで削除されます (
no-duplicates
フラグがオンでない限り。)
短所:
- すべての ACL が失われます。
- Windows 1 からアクセスできません。
- 追加可能ですが、そこから除去することはできません。
- 他の目的でディスクを使用するには、バックアップ 2 を破棄する必要があります。
バックアップドライブを準備する
- すべてのパーティション
/dev/sdBN
を消去してから、パーティションテーブル/dev/sdB
を wipefs で消去します。 - すべてのライトキャッシュを同期する
#sync
- パーティションテーブルの変更をOSに通知する
#partprobe
- 不正なブロックをチェックする。
- バックアップドライブが SSD の場合は、S.M.A.R.T. を使用します。
- バックアップドライブが HDD の場合は、 badblocks を使用します。
ライブメディアの準備
インストールガイド#インストールメディアの準備 または archiso を /dev/sdL にインストールします。
バックアップ
バックアップしたいファイルシステムをマウントします。(例:/dev/sdSRC を /mnt に)
# fsck /dev/sdSRC # mount -o ro /dev/sdSRC /mnt
を実行します。
バックアップ (サンプルスクリプト)
# mksquashfs /mnt /dev/sdB \ -not-reproducible \ -xattrs \ -wildcards \ -noappend \ -progress \ -mem 5G \ -e \ var/cache/pacman/pkg \ var/lib/pacman/sync \ var/log/journal \ boot/efi \ boot/grub \ boot/initramfs-linux"*".img \ boot/vmlinuz-linux
- -not-reproducible
- バックアップ速度を若干上げる
- -noappend
- 上書き
- -mem
- mksquashfsに RAM を付与
- -e
- 除外するディレクトリ/ファイルのリスト
QEMU でのバックアップのテスト (任意)
許可を与える
$ sudo chown $USER:$USER /dev/sdB
QEMU を起動する
$ qemu-system-x86_64 \ -kernel /boot/vmlinuz-linux \ -append "root=/dev/sdB ro loglevel=3 init=/usr/lib/systemd/systemd" \ -initrd /boot/initramfs-linux-fallback.img \ -drive file=/dev/sdB,index=0,media=disk,format=raw \ -m virtual_machine_ram_in_MiB \ --enable-kvm \ -cpu host
バックアップの検査 (オプション)
バックアップの日付を取得する
# date --date=@"$(unsquashfs -mkfs-time /dev/sdB)"
スーパーブロックの詳細情報
# unsquashfs -stat /dev/sdB
チェックサム
# COUNT="$(unsquashfs -stat /dev/sdB | grep -F 'Filesystem size' | cut -d' ' -f3)" # echo "$COUNT Byte" # numfmt --to=iec-i "$COUNT" # head -c "$COUNT" /dev/sdB | sha1sum | tee -a sha1sum.txt
バックアップからファイルを取得する
# mount /dev/sdB /mnt # cp /mnt/path/to/file /path/to/destination