HDDの丸ごとコピー
最終更新日:2011年
- dd コマンド
- この方法は非常に単純な方法で正確なコピーの作成が可能ですが…
dd コマンドの実行中は HDD を停止せねばなりません。
その間の代わりのサーバーとして一時的に予備機を用意したいものです。
予備機に切り替える数分間はウェブ配信が出来なくなります。
(個人的なホームページでしたら数分間くらいなら困らないでしょう。)
予備機を動かす時間は大体2~3時間くらいです。
とても短時間なので古いパソコンでも大丈夫です。
なので余ってる PC があればこの方法が一番良いと思います。
ほかに用意するものとしては、knoppix 5.3.1 を使いました。
(無料でダウンロードできる “1CD-Linux” です)
- 注意事項
- HDD を丸ごとコピーするには2台目の HDD の容量が同等以上であること。
大きい HDD の場合は元の HDD の中身を書き込んだ余りは未使用となり勿体無いですが問題なく実行できます。
ただしこれを繰り返して次々と大きくしていくのは経済的にも物理的にも無理ですね。
丸ごとコピーを繰り返すなら同じ容量の HDD を使いたいものです。
同じ容量といっても購入時の表記をあてにしては絶対に駄目です。
余裕もたせて必ず大きめに製造されてます。
例)Seagate社 40 GB ⇒ 40020664320 bytes
同じブランドでも製造時期や製造ロットが違えば変更されてる製品もあります。
必ず自分で調べて1バイト単位まで容量を確認します。
※調べる方法は、次項の fdisk -l を参照してください。
- dd を始めます。
- knoppix CDを挿入したら再起動
# reboot
F2 をクリック
boot: knoppix 2 noswap ←あるいは3でもかまわない。
「スペース」キーをクリック
※ここで設定せずに後からでも変更が可能。
# “Alt+Ctrl+F2” テキストモード
# “Alt+Ctrl+F5” グラフィカルモード
# fdisk -l ←確認
Disk /dev/sda: 40.0 GB, 40020664320 bytes ←名前(sda)と容量(40020664320)の確認
ext3形式でフォーマット、3通りある方法から選ぶ、不良ブロック修復が可能。
# mke2fs -j /dev/sda ←約1分 初期化のみ!
# mke2fs -jc /dev/sda ←約1時間 read-only Test
# mke2fs -jcc /dev/sda ←約5時間 read-write Test
c =不良ブロック検査。
※測った時間は、いずれも SCSI4,0 の場合です。
コピーを開始する
# dd if=/dev/hda of=/dev/sda ※所要時間 40GB 約2時間
( 「=」の入力は[^]のキーを使う。)
78165360+0 records in
78165360+0 records out
40020664320 bytes (40 GB) copied, 8177.09 s, 4.9 MB/s
別の数台のPCにて若干の差異があっても凡そ2時間で完了した。
最短 6049.88 s, 6.6 MB/s
最長 8905.87 s, 4.5 MB/s
- 念のため確認する
- # fdisk /dev/sda
- 終了する
- # shutdown -h now
自動的に CD イジェクトして電源も切れる…たかが 1CD-Linux なのに賢い!
- 復元するには
- if と of の名前を入れ替える。
# dd if=/dev/sda of=/dev/hda ←sdaをhdaに復元
- DMA の有効化
- # hdparm /dev/hda ←確認
DMA がオフの場合は有効にする。
# hdparm -A1 -c3 -d1 -m16 -X69 /dev/hda ←やりすぎ(笑)
# hdparm -tT /dev/hda
- 不良 HDD から緊急にデータを吸い出す場合の dd コマンドの場合
- # dd if=/dev/hda of=/dev/hdb bs=4096 conv=noerror
- パーティションをコピーするには
- # dd if=/dev/hda1 of=/dev/sda1
手順は上記とほぼ同じだがフォーマットだけは絶対にしない事。
- 基本のコマンド
- 私としては、conv=sync とか conv=noerror とか bs= や count= のコマンドが嫌いです!
基本の dd コマンドでコピーします。
理由はエラーを感知して途中でストップするようではサーバ機には安心して使えません。
完全なエラー無しでスムーズにコピーを完了した場合のみ安心してサーバ機として使えます。
40GB のハードディスクなら Ultra SCSI 20MB 転送でも約2時間20分で完了しました。
10GB なら 34分! たかが 10GB といえど個人ホームページなら凡そ100人が利用できるサイズです。
- 緊急のファイル救出
- もしかして HDD に何かあった時はもちろん緊急のファイル救出を試みます。
dd if=/dev/hda of=/dev/sda conv=sync,noerror
を使います。
- dd のオプション
- if=file 入力ファイルを指定する。指定がない場合は標準入力を表す
of=file 出力ファイルを指定する。指定がない場合は標準出力を表す
ibs=bytes 一度に指定したバイトのブロックを読み出す
obs=bytes 一度に指定したバイトのブロックを書き込む
bs=bytes 一度に指定したバイトのブロックを読み書きする
cbs=bytes 一度に指定したバイトのブロックを変換する
skip=blocks 入力ファイルの先頭から指定したブロックをスキップする
seek=blocks 出力ファイル中の指定したブロックをスキップする
count=blocks 入力ファイルから出力ファイルへ指定したブロックをコピーする
conv=code コード変換を行する。指定できるコードは後述のコード表を参照
- Linux のカーネルをフロッピーディスクにコピーする
- # dd if=/boot/vmlinuz of=/dev/fd0
ただし、まだ試す機会が無いのが幸せってこと?
- dd でクローン作成したサーバー機の重要な注意
- ネットワーク確認
192.168.0.***
※クローン後に異常な動作をして困った事があったので要注意です!
BIOS確認
電源:自動
OS:その他
※クローンと同時に別の PC に入れ替える時は要注意です!
- 自動バックアップ作成
- 私の場合は1~2ヶ月に一回くらいでクローンを作り直し、
あとは日常的に mysql の中身を丸ごとコピーすれば安心です。
↓
/var/lib/mysql を /backup/mysql に保存する。
※ /backup/mysql (新しいディレクトリを準備する)
※ crontab (.shファイルに追記すれば自動的な実行が可能)
# vi mysql-backup.sh ←スクリプト作成
---------
#!/bin/bash
PATH=
BACKDIR=
ROOTPASS=
・・・中略
----------
Escをクリック
:wq! ←終了
# chmod 700 mysql-backup.sh ←root権限パーミッション変更
# ./mysql-backup.sh ←手動でバックアップを実行
# ll /backup/mysql/ ←確認
# crontab -e
00 05 * * * /root/mysql-backup.sh ←追加
(毎日5:00にバックアップを実行する)
- 復元
- 復元
# /bin/cp -Rf /usb1/mysql/wp2/ /var/lib/mysql/ ←復元実行
# chown -R mysql:mysql /var/lib/mysql/wp2/ ←所有者をmysqlに変更
# chmod 700 /var/lib/mysql/****/ ←パーミッション変更
確認
mysql> show databases; ←データベースの復元を確認
Copyright © 2001-2023 HIROCI All rights reserved.