「SquashFS によるフルシステムバックアップ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:バックアップ en:Full system backup with SquashFS {{Related articles start}} {{Related|tar によるフルシステムバックアップ}} {{Related…」)
 
(他言語へのリンクを追加)
 
(2人の利用者による、間の12版が非表示)
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 によるフルシステムバックアップ}}
 
{{Related articles end}}
 
{{Related articles end}}
[[Wikipedia:ja:SquashFS|SquashFS]] [http://squashfs.sourceforge.net/] は完全なシステムの読み取り専用のバックアップアーカイブを高圧縮で作成します。SquashFS カイブは解凍しなくてもウンして find/grep/cp/tree を実行ので便利です。tar と比べてバックアップにかかる時間は少なくファイルの取得・検索のオーバーヘッドも減りまが、アーカイブに一度してしうと後から変更できないという欠点があり
+
ファイルシステム全体圧縮バックアップアーカイブを [[ファイルシステム#Read-only ファイルシステム|SquashFS]] フォーマトで作成すことがきます。ランダムアクセスが可能なため、バックアップや取り出し比較的時間がかかりませんが、追記以外の改変はできません
   
  +
{| class="wikitable"
== ライブ CD/DVD/USB の準備 ==
 
  +
|-
  +
! デバイスファイル
  +
! 説明
  +
|-
  +
| /dev/sdB
  +
| バッアップドライブ
  +
|-
  +
| /dev/sdL
  +
| ライブメディア
  +
|-
  +
| /dev/sdSRC
  +
| バックアップするドライブ
  +
|}
   
  +
== 長所と短所 ==
SquashFS アーカイブを作成するには {{Pkg|squashfs-tools}} がインストールされているライブ CD/DVD/USB を用意する必要があります。[[Archiso#ライブメディアの設定]]を読んで {{ic|packages.x86_64}} を設定して {{Pkg|squashfs-tools}} がインストールされているライブ CD/DVD/USB を作成してください。
 
   
  +
長所:
== ライブ環境でバックアップ ==
 
   
  +
* パーティションなし、必要なサイズの推測なし。
ライブ CD/DVD/USB を起動してバックアップしたいファイルシステムをマウントしてください。
 
  +
* [[ファイルシステム#Read-only ファイルシステム|SquashFS]] ほとんどのレスキューディスクでサポートされています。
  +
* [https://en.wikipedia.org/wiki/Tar_(computing)#Random_access ランダムアクセス] で、プレーンな {{ic|mount}} を使用する。
  +
* 重複ファイルはデフォルトで削除されます ({{ic|no-duplicates}} フラグがオンでない限り。)
   
  +
短所:
{{Note|以下は sdb1 が EFI パーティションで sdb2 がルートパーティションの EFI-grub による Arch 環境の例です。}}
 
   
  +
* すべての [[ACL]] が失われます。
# fsck /dev/sdb2
 
  +
* Windows <sup>1</sup> からアクセスできません。
# fsck /dev/sdb1
 
  +
* 追加可能ですが、そこから除去することはできません。
# mount /dev/sdb2 /mnt
 
  +
* 他の目的でディスクを使用するには、バックアップ <sup>2</sup> を破棄する必要があります。
# mount /dev/sdb1 /mnt/boot/efi
 
# /somewhere/mksquashfs.sh SOURCE_DIRECTORY BACKUP_ARCHIVE_DIRECTORY
 
   
  +
{{Note|
スクリプトの中身:
 
   
  +
# [https://github.com/AgentD/squashfs-tools-ng squashfs-tools-ng] は SquashFS イメージファイルをサポートしているかもしれませんが、Windows 自身はパーティションレスドライブを全くサポートしていません。
{{hc|/somewhere/mksquashfs.sh|
 
  +
# [[wikipedia:Swim ring|swim ring]] が必要なときに [[wikipedia:Lifebuoy|lifebuoy]] を''掴まないでください'' ファイル共有とバックアップは別々のディスクにして下さい。[https://askubuntu.com/a/594861 適切なバックアップハードウェアを購入する]
#!/usr/bin/env bash
 
  +
}}
   
  +
== バックアップドライブを準備する ==
# Sanity
 
  +
if [ $# -ne 2 ]; then
 
  +
{{Warning|1=<nowiki/>
echo "invoke: mksquashfs.sh SOURCE_DIRECTORY BACKUP_ARCHIVE_DIRECTORY"
 
  +
* バックアップドライブ上のすべてのデータが失われます。
exit 1
 
  +
* 誤ったデバイスファイルを指定すると、マシン上のすべてのデータが失われる可能性があります。}}
fi
 
  +
echo -ne "\n\nHave you fsck'd? "
 
  +
# すべてのパーティション {{ic|/dev/sdBN}} を消去してから、パーティションテーブル {{ic|/dev/sdB}} を [[デバイスファイル#wipefs|wipefs]] で消去します。
read
 
  +
# すべてのライトキャッシュを同期する {{ic|#sync}}
  +
# パーティションテーブルの変更をOSに通知する {{ic|#partprobe}}
  +
# 不正なブロックをチェックする。
  +
#* バックアップドライブが [[SSD]] の場合は、[[S.M.A.R.T.]] を使用します。
  +
#* バックアップドライブが HDD の場合は、 [[badblocks]] を使用します。
  +
  +
== ライブメディアの準備 ==
  +
  +
[[インストールガイド#インストールメディアの準備]] または [[archiso]] を /dev/sdL にインストールします。
  +
  +
{{Note|SquashFS ファイルシステムを作成するには、[https://archlinux.org/download/ official Arch Linux installation image] に含まれている{{Pkg|squashfs-tools}} が必要です。}}
  +
  +
== バックアップ ==
  +
  +
[[インストールガイド#ライブ環境の起動]]
  +
  +
{{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 \
# Backup
 
  +
-not-reproducible \
mksquashfs \
 
"$1" "$2/$(date +%Y%m%d_%a).sfs" \
 
-comp gzip \
 
 
-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|以下のスクリプトは未確認です。まだ使わないでください。}}
 
   
# {{ic|mount somewhere/backup.sfs /mnt}}
+
# 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 を破棄する必要があります。
ノート:
  1. squashfs-tools-ng は SquashFS イメージファイルをサポートしているかもしれませんが、Windows 自身はパーティションレスドライブを全くサポートしていません。
  2. swim ring が必要なときに lifebuoy掴まないでください ファイル共有とバックアップは別々のディスクにして下さい。適切なバックアップハードウェアを購入する

バックアップドライブを準備する

警告:
  • バックアップドライブ上のすべてのデータが失われます。
  • 誤ったデバイスファイルを指定すると、マシン上のすべてのデータが失われる可能性があります。
  1. すべてのパーティション /dev/sdBN を消去してから、パーティションテーブル /dev/sdBwipefs で消去します。
  2. すべてのライトキャッシュを同期する #sync
  3. パーティションテーブルの変更をOSに通知する #partprobe
  4. 不正なブロックをチェックする。
    • バックアップドライブが SSD の場合は、S.M.A.R.T. を使用します。
    • バックアップドライブが HDD の場合は、 badblocks を使用します。

ライブメディアの準備

インストールガイド#インストールメディアの準備 または archiso を /dev/sdL にインストールします。

ノート: SquashFS ファイルシステムを作成するには、official Arch Linux installation image に含まれているsquashfs-tools が必要です。

バックアップ

インストールガイド#ライブ環境の起動

ヒント: バックアップドライブとライブメディアの両方に十分な USB ポートがない場合。
  1. ライブメディアを起動する
  2. ブートローダーのメニューが表示されたら、'e' を押します。
  3. カーネルパラメータcopytoram を追加する。
  4. # udisksctl power-off -b /dev/sdL を実行します。(必要 archiso relengudisks2packages.x86_64])
  5. ライブメディアの回転が止まったことを確認し、切断する。

バックアップしたいファイルシステムをマウントします。(例:/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 を起動する

ノート: カーネルinitramfs はホストマシンのものが使用されます。
$ 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

チェックサム

この記事またはセクションの正確性には問題があります。
理由: unsquashfs -stat and df gives different sizes (議論: トーク:SquashFS によるフルシステムバックアップ#)
# 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

バックアップの復元

ノート:

リストア後にシステムを起動できるようにする。