« マスキングテープのイベント:『mt store in ならまち』に行ってきた | トップページ | 【Linux】SoftRAIDを構成するディスクの交換 »

2014年9月 1日 (月)

【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を構成するディスクの交換 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/198640/60245908

この記事へのトラックバック一覧です: 【Linux】出来るだけ簡単に行うブートディスクの換装:

« マスキングテープのイベント:『mt store in ならまち』に行ってきた | トップページ | 【Linux】SoftRAIDを構成するディスクの交換 »