【Linux】出来るだけ簡単に行うブートディスクの換装
このエントリの続きのような感じだけど,独立した話です.
もう一昔前にこんな記事を書いたのだけど,今回の対象は少々環境が異なり,ベースがCentOSでブートローダーがgrubって感じ.忘れた頃に必要になりそうなネタなので,備忘録的に簡単にまとめてみます.
交換に踏み切った切っ掛けはsmartの警告.以下のような感じ.
# grep -i smart /var/log/messages
....
Jul 31 17:06:19 hogehoge smartd[3925]: Device: /dev/sda, 1 Currently unreadable (pending) sectors
Jul 31 17:06:19 hogehoge smartd[3925]: Device: /dev/sda, 1 Offline uncorrectable sectors
仕事で使ってた小規模ワークグループ鯖なので,少しドキドキしつつ作業開始.
元々のsdaの構造はというと,こんな感じ.
デバイス Boot Start End Blocks Id System
/dev/sda1 * 1 16 128488+ 83 Linux
/dev/sda2 17 538 4192965 82 Linux swap / Solaris
/dev/sda3 539 19457 151966867+ 83 Linux
たった120GBのディスクです.今時売ってるのかな….
で,SSDに替えようかと思ったけど,もう少し容量的が欲しかったこともあり,2TBのディスクに換装することに.TOSHIBA DT01ACA200 2TBを調達.最近は大容量化のあおりと価格の下落の関係か,2TBが購入しにくくなってる気がする.MBR運用できるので潰しが利いて便利なんだけどな.
新しいディスクは空きのsataポートに接続.sdfとして認識.
ではまずパーティションを切りましょう.パーティション構成は元と同じでプライマリパーティション3つに切り,各パーティションの容量を増やします.なお,2TB以下のディスクなので,fdiskコマンドを使用して切ります.
# fdisk /dev/sdf
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。
このディスクのシリンダ数は 243201 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります
コマンド (m でヘルプ): p
Disk /dev/sdf: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-243201, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-243201, default 243201): +128M
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 2
最初 シリンダ (18-243201, default 18):<リターン>
Using default value 18
終点 シリンダ または +サイズ または +サイズM または +サイズK (18-243201, default 243201): +8000M
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 3
最初 シリンダ (992-243201, default 992):<リターン>
Using default value 992
終点 シリンダ または +サイズ または +サイズM または +サイズK (992-243201, default 243201):<リターン>
Using default value 243201
コマンド (m でヘルプ): t
領域番号 (1-4): 2
16進数コード (L コマンドでコードリスト表示): 82
領域のシステムタイプを 2 から 82 (Linux swap / Solaris) に変更しました
コマンド (m でヘルプ): p
Disk /dev/sdf: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/sdf1 1 17 136521 83 Linux
/dev/sdf2 18 991 7823655 82 Linux swap / Solaris
/dev/sdf3 992 243201 1945551825 83 Linux
コマンド (m でヘルプ): w
領域テーブルは交換されました!
ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
次にスワップ領域(sdf3)のフォーマットし,ext3でsdf1,sdf2をフォーマット.
# mkswap /dev/sdf2 (中略) # mkfs -t ext3 /dev/sdf1 (中略) # mkfs -t ext3 /dev/sdf3 (中略) This filesystem will be automatically checked every 31 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
準備完了.
では,システムを動かしながらファイルをコピーして行きましょう.
なお,この方法は正直あまり褒められたような方法ではありません.コピー中/後にファイルを書き換えられたら反映されませんし.書き込み中にコピーしてしまうとトラブルの原因になる場合もあります.
作業中の書き込みを極力下げることが出来,また,換装のための手間を極限まで下げたいときにのみ実施して下さい.もし少し余裕があるのであれば,シングルユーザモードでやる方が吉です.
作業用に各パーティションをマウントポイントを作成し,マウントします.sdaまでわざわざディレクトリを掘ってマウントしているのは,実ファイルのみコピーするためです.
# mkdir /mnt/sdf1 # mkdir /mnt/sdf3 # mount /dev/sdf1 /mnt/sdf1 # mount /dev/sdf3 /mnt/sdf3 # mkdir /mnt/sda1 # mkdir /mnt/sda3 # mount /dev/sda1 /mnt/sda1 # mount /dev/sda3 /mnt/sda3
で,rsyncを使いたくなると思うのですが,対象ファイルが多すぎると色々とトラブります.そこでベタにtarでコピーすることにしましょう.
#cd /mnt/sda1 #tar cpf - ./ | (cd /mnt/sdf1; tar xpf -) #cd /mnt/sda3 #tar cpf - ./ | (cd /mnt/sdf3; tar xpf -)
進捗を表示したいときは,tarのオプションを"xpvf"にして下さい.
途中,『ソケットは無視します』って数個警告が出ますが,無視してOKです.また,開きっぱで更新中のファイル,例えば"/var/lib/mlocate/mlocate.db"のようなファイルは,『ゼロ埋めするよ』と警告されると思います.どう対応するかは各人判断して下さい.なお,mlocate.dbは無視して&後で作り直せば良いです.
120GBくらいのコピーであれば,少し待てば終わります.
実態がコピーされたら,次はブートローダー周りの設定に行きます.LILOのときは一番トラブりやすい部分だったのですが….
#grub
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> device (hd0) /dev/sdf
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/grub
.conf"... succeeded
Done.
grub> quit
これでOK.拍子抜けする程簡単です.『sdfをhd0と見る』としてからセットアップするだけ.楽勝.
次に各パーティションのラベル設定.
この環境ではfstabが以下のようになっており,ラベルを元にマウントするように設定してある(斜体部分)ので…
# cat /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda2 swap swap defaults 0 0
<後略>
こんな感じで設定します.あ,swapは作り直してます.
# tune2fs -L /boot /dev/sdf1 tune2fs 1.39 (29-May-2006) # e2label /dev/sdf1 /boot # tune2fs -L / /dev/sdf3 tune2fs 1.39 (29-May-2006) # e2label /dev/sdf3 / # mkswap -L SWAP-sda2 /dev/sdf2 Setting up swapspace version 1, size = 8011415 kB LABEL=SWAP-sda2, no uuid
一通り設定が終わったら電源を落とし,sdaとして繋がっていた障害を抱えているディスクを外します.そしてsdfとして繋いで&設定を行った新しいディスクをsdaの刺さっていたポートに繋ぎましょう.
物理的な再結線が終わったら,しばし無事に起動するように祈りましょう.
手順的に問題無ければ,ポチッと起動すれば実にあっけなく動き始める筈です.
元のsdaはそのままの状態で残っていますので,何かトラブった場合は,もう一度接続して色々試してみて下さい.
検索エンジンからキーワード検索で飛んできた皆様,GoodLuckです.フォースと共にあらんことを.
« マスキングテープのイベント:『mt store in ならまち』に行ってきた | トップページ | 【Linux】SoftRAIDを構成するディスクの交換 »
「Linux」カテゴリの記事
- 家の中のネットワークを2.5GbEに置き換えて快適・高速化を試してみる&HeroBoxをNAS化(2022.09.20)
- 家のサーバやNW環境を停電に強い構成にするためにPoE化を考える:CHUWI HeroBox(2)(2022.08.29)
- 無音,ハイパフォーマンスなミニPCをLinuxサーバにする:CHUWI HeroBox(1)(2022.08.16)
- 【Linux】SoftRAIDを構成するディスクの交換(2014.09.02)
- 【Linux】出来るだけ簡単に行うブートディスクの換装(2014.09.01)
« マスキングテープのイベント:『mt store in ならまち』に行ってきた | トップページ | 【Linux】SoftRAIDを構成するディスクの交換 »
コメント