June 30 Sat, 2012

*1  3TB SATA HDD の Debian GNU/Linux での初期設定

HDDがなかなか安くならないなとしばらく様子を伺っていたが、自宅サーバの容量が一杯になりつつあるので流石に諦めてSeagate Barracuda 7200シリーズ 3.5inch SATA 6Gb/s 3TB 7200rpm 64MB 4Kセクター ST3000DM001$149.99 で購入。値段は1ドル80円換算で日本とほとんど変わらない。下記は Debian GNU/Linux wheezy/sid での設定とディスク内容のマイグレーションを備忘録として書いたものだが、正確性は担保しないので当然ながら自己責任で参考にしてください。

まずは自宅のHP ML115に追加接続して Linux で起動。ちなみに元々の disk が sda で新しく導入した disk が sdb 。
[    1.848040] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    1.856296] ata1.00: ATA-8: ST3000DM001-9YN166, CC4B, max UDMA/133
[    1.856301] ata1.00: 5860533168 sectors, multi 16: LBA48 NCQ (depth 31/32)
[    1.872281] ata1.00: configured for UDMA/133
...
[ 2.676866] sd 0:0:0:0: [sdb] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)
[ 2.676872] sd 0:0:0:0: [sdb] 4096-byte physical blocks
[ 2.676935] sd 0:0:0:0: [sdb] Write Protect is off
[ 2.676939] sd 0:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 2.676967] sd 0:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
起動時に認識はしている。BIOSなどによっては認識しないこともあるらしいのでそこは一安心。今回は2TBより大きなディスクなので fdisk/cfdisk では正しく扱えない (確か700GB程度しか認識しない状態になるはず) ため parted にて GPT を使う。まあ今時 parted だよねーという話ではある。ちなみに partition を切る必要が無ければ
 # mkfs -t ext4 /dev/sdb
とかして丸ごと使う分には 3TB でも問題なく行けるはず。さておき。下記ではまず最初に label を gpt に設定した後、1 を / partition (ext3, rootfs, bootable) 10GiB 、2 が swap で 4Gib、3 で残り全てをLVMに割り当てている。コンサバ気味に rootfs は lvm 上ではなく素の primary 上に ext3 で作っている。1 の start を 2048s にしているのは 0 だと alignment がどうのと怒られたから。なお parted は interactive なやりとり中に disk を実際にいじっているので操作間違いにはくれぐれも注意。X で使ってるなら gparted の方がいいかも。
# parted /dev/sdb
(parted) mklabel gpt
...
(parted) mkpart primary 2048s 10GiB
...
(parted) set 1 boot on
...
(parted) mkpartfs primary linux-swap 10Gib 14GiB
...
(parted) mkpart primary 14Gib -1s
...
(parted) set 3 lvm on
...
(parted) print
Model: ATA ST3000DM001-9YN1 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number Start End Size File system Name Flags
1 1049kB 4295MB 4294MB ext3 primary
2 4295MB 8590MB 4295MB primary
3 8590MB 3001GB 2992GB primary lvm
(parted) quit
そうしておいて LVM 部分を更に /usr /var /home に切り分け。この辺は趣味の世界だけど、昔からの習性で自分で Linux を入れるときはなんとなくこの構成にしていることが多い。今時だと /var はもっと大きくてもいいが、Virtual Machine なんかも /home の下に作れば済むのでこれくらいにしてる。LVM の基本的な使い方は 基本的なLVMの使い方A Beginner's Guide To LVM 等を参照のこと。
# pvcreate /dev/sdb3
# pvscan
PV /dev/sda3 VG userspace lvm2 [2.72 TiB / 0 free]
Total: 1 [2.72 TiB] / in use: 1 [2.72 TiB] / in no VG: 0 [0 ]
# vgcreate uservolume00 /dev/sdb3
# vgscan
Reading all physical volumes. This may take a while...
Found volume group "uservolume00" using metadata type lvm2
# lvcreate -L 10G -n usr
# lvcreate -L 20G -n var 
# lvcreate -l 100%FREE -n home
# lvscan
ACTIVE '/dev/uservolume00/var' [20.00 GiB] inherit
ACTIVE '/dev/uservolume00/usr' [10.00 GiB] inherit
ACTIVE '/dev/uservolume00/home' [2.69 TiB] inherit
あとは普通にファイルシステムを作る。
# mkfs -t ext4 /dev/uservolume00/home
# mount -t ext4 /dev/uservolume00/home /mnt
...

*2  rootfs その他を新しい disk に切り替え

元のファイルシステムは LVM とかじゃない素の partition なので、あまり素敵技術は使えない。もっと賢い方法があったら知りたいけど、とりあえず単純に rsync する。真面目にやる人は当然 single user mode でやりましょう。
# mkdir /target
# mount /dev/sdb1 /target
# mkdir /target/usr /target/var
# mount /dev/usrvolume00/usr /target/usr
# mount /dev/usrvolume00/var /target/var
# mount /dev/usrvolume00/home /target/home
# rsync -avD /etc /bin /sbin /boot /lib /lib32 /lib64 /usr /var /target
# rsync -avD /home /target
# rsync -avD /vmlinuz /initrd.img /target
mount で見て殆どの tmpfs, procfs, sysfs, udev, devpts, cgroup とかは勝手に面倒見てくれるはずなので directory だけ作っておく。
# mkdir /target/proc /target/sys /target/run /target/dev /target/root /target/mnt /target/tmp
新しいシステムでの /etc/fstab (/target/etc/fstab)を書き換え。 LVM じゃないやつは最初に UUID を取っておく。parted から label つけて使ってもいいけどそこはお好みで。
# blkid /dev/sdb1
/dev/sda1: UUID="......-.....-....." TYPE="ext3"
swap も確保してるので作っておく。今時の mkswap なら UUID も勝手に割り当ててくれるはず。
# mkswap /dev/sda2
/target/etc/fstab を編集。
UUID="......-.....-....." / ext3 defaults 0 1
/dev/uservolume00/usr  /usr  defaults  0  2
/dev/uservolume00/var  /var  defaults  0  2
/dev/uservolume00/home  /home  defaults  0  2

UUID="......-.....-....." none swap sw 0 0
あとは grub を入れれば終わり。そのまま入れても initrd 等がおかしくなるので新しい / に chroot して linux-image を reconfigure する作戦。あと grub-install は GPT だと文句を言ってくるので --force で無理やり入れてしまう。
# chroot /target
# dpkg-reconfigure linux-image-3.2.0-2-amd64
# grub-install /dev/sdb --force
とりあえず /boot/grub/grub.cfg の当該部分はこんな感じに。
menuentry 'Debian GNU/Linux, with Linux 3.2.0-2-amd64' --class debian --class gnu-linux --class gnu --class os {
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='(hd1,gpt1)'
        search --no-floppy --fs-uuid --set=root a61b7b93-5992-49d3-aa12-ea65ec3d3325
        echo    'Loading Linux 3.2.0-2-amd64 ...'
        linux   /boot/vmlinuz-3.2.0-2-amd64 root=UUID=a61b7b93-5992-49d3-aa12-ea65ec3d3325 ro  quiet
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-3.2.0-2-amd64
}
物理的に sda と sdb のケーブルを繋ぎかえて再起動すれば完了、のはず。UUIDやLVMで管理しているので繋ぎ変える必要はないのだけど、これも趣味の問題である。

About W.W.Walker

World Wide Walker は yoosee による blog です。PDA, Web・サーバ技術, 美味しい食べ物などの話題を取り上げています... read more

Monthly Archives

Select Month to read
  

Ads

Recent Entries

Archives...

Related Sites