液晶の壊れたDynabook SS 3440にDebian載せてもう4年くらい家のserverに使ってた。さすがにそろそろHDDあたりがやばいんじゃないかとserverを一新する事にした。あと、Windows Desktop PCに入れてあるiTunes libraryを多少安全なdiskに移したいというのも理由の一つ。(触れないくらいの温度で24時間稼動、、、)TeraStationの様な’NAS’として売ってる製品も考えたが、Linuxとしていじる時に普通のx86 PCの方が楽な気がしたのでそれは選択肢からはずした。PCは以下の構成。
- CPU: Intel E6300 (Core 2 Duo 1.86GHz, cache 2MB)
- mother board: Intel DG965WH
- memory: DDR2 5300 (667MHz) 1GB
- HDD: Maxtor DiamondMax21 320GB (SATA2) x4
用途的には世代遅れのCPUで十分だし電気も食わないんだけど、なぜか Core 2 Duo にしてしまった。LinuxはDebian Etch amd64 (kernel 2.6.17)でdiskはmd Raid5 + LVM2。
Debian installer boot from CD-ROM
まず、install packageをダウンロード。Debian の testing netinstall(netinst CD image amd64)。PATAに繋いだCD-ROMから無事にboot。しかし、bootしてからPATAのCD-ROMをkernelが認識してくれなくて、installerを先に進めない。。。ググると、これはSATAとPATAの混在システムで起きる問題っぽく、根本的解決方法が無いっぽい。しょうがないので、USB Flash memoryからinstallする方法で行く。
create bootable USB Flash memory
USB Flashをbootable deviceにするためにはUSBにアクセスできるLinux machineが必要。DynabookはあいにくUSB portが無い。しかしこれからDebianをinstallしようとしてるmachineがCD-ROMからbootだけはするのでその環境をbootable USB Flashを作るだけのために使えた。
- hd-mediaのboot.img.gzをダウンロード
- WindowsでもMacでも、とにかくbootに使うUSB Flash(fat file system)にboot.img.gzとCD-Rを作るときに使った .iso fileを書き込む。(Flash memoryの中身は後で全部消える事に注意)
- CD-Rでboot
- bootしたらUSB Flash memoryをUSB portに刺す
- Alt-F2でconsoleを出す
- 以下の操作でbootable USB flashを作る
# mount -t vfat /dev/sda1 /mnt
(/dev/sd*は/var/log/syslogでどのdeviceが割り当てられたか確認)
# cp /mnt/* /tmp (boot.img.gz と .isoを/tmpにコピー)
# cd /tmp
# umount /mnt
# zcat boot.img.gz > /dev/sda (flash memoryは完全に上書きされる)
# mount /dev/sda /mnt
# cp /tmp/<.iso file name> /mnt
# umount /mnt
# reboot
- BIOSをUSB flashからbootするように変更
- USB flashからboot、そしてinstallerに従ってinstallを進める
そういえば、最初 iPod ShuffleをUSB Flashとして使ったんだけどbootしなくてだいぶ悩んでしまった。ShuffleはUSB Flashのようであって、単純なUSB Flashでは無いっぽい。。。でわざわざ新しくUSB Flashを買った。
さらにもう一つ。ICH8のEthernetは認識してくれなかったので、余ってたDECの21140 PCI cardを使ってる。(kernel 2.6.18からはICH8をサポートしてるらしい。)
Debian Installer: HDD partitioning issue
md RAID5+LVM2にroot以下、/boot以外の全部を置く方針。Debian installerもそれをサポートしてるような事が書いてあるのを見たんだがRAID5を設定するとinstallerがfailしてそれ以上は進めなくなる。妥協案として、一つのHDDに素でinstallし、そこからbootしたDebianで他の3つのHDDをRAID5+LVM2(HDDが一つ足りないdegraded arrayとして)に設定し、bootしたHDDの中身をdegraded arrayにコピーし今度はそっちをboot diskにしてbootした後、RAIDになって無いさっきの残り1つのHDDをRAID5に加える、、、という面倒な方法を取る。
こっから下はInstallerでRAID5+LVM2を作れるようになったら全くいらない作業。
- USB Flashからのinstallerの続きで、partitionのstep
- /dev/sda /dev/sdb /dev/sdc /dev/sddがある内、/dev/sddをinstallに使う。いずれにしても、後でこのdiskは消す事になるので、何も考えずにguidedの1 partitionでpartitionを切る。
- installを進めて、reboot
- cfdiskで以下の様にこれからRAIDにするdiskを切る
sda: sda1 320GB fd, sda2 300MB 82, sda3 200MB 83 bootable
sdb: sdb1 320GB fd, sdb2 500MB 82
sdc: sdc1 320GB fd, sdc2 500MB 82
- まずHDD3個だけでRAID5 arrayを作る (sdd1 = missing)
# mdadm -v --create /dev/md0 --chunk=128 --level=raid5 --raid-devices=4 \
/dev/sda1 /dev/sdb1 /dev/sdc1 missing
- LVMでpartitionを切る
# pvcreate /dev/md0
# vgcreate vg00 /dev/md0
# lvcreate vg00 -n usr -L 10G
# lvcreate vg00 -n tmp -L 10G
# lvcreate vg00 -n home -L 90GB
# lvcreate vg00 -n root -L 700MB
# vgdisplay (Free PE を確認)
# lvcreate vg00 -n var -l 200190
- partitionを切った結果を確認
# pvdisplay
# vgdisplay
# lvdisplay
- ext3でformat (stride size = raid chunk size / fs block size)
# mkfs.ext3 -b 4096 -R stride=32 /dev/vg00/usr
# mkfs.ext3 -b 4096 -R stride=32 /dev/vg00/var
# mkfs.ext3 -b 4096 -R stride=32 /dev/vg00/tmp
# mkfs.ext3 -b 4096 -R stride=32 /dev/vg00/home
# mkfs.ext3 -b 4096 -R stride=32 /dev/vg00/root
# mkfs.ext3 /dev/sda3
# mkswap /dev/sda2
# mkswap /dev/sdb2
# mkswap /dev/sdc2
- /dev/sddの中身を全部RAID5+LVM2のpartitionにコピー
# mkdir /target
# mount /dev/vg00/root /target
# cd /target
# mkdir usr home tmp var boot
# mount /dev/vg00/usr /target/usr
# mount /dev/vg00/home /target/home
# mount /dev/vg00/tmp /target/tmp
# mount /dev/vg00/var /target/var
# mount /dev/sda3 /target/boot
# tar clf - --preserve --same-owner --exclude=/proc/* --exclude=/sys/* / \
| (cd /target; tar xvpf - --preserve --same-owner)
- chroot
# chroot /target
- /etc/fstabのedit
/dev/mapper/vg00-root / ext3 defaults,errors=remount-ro 0 1
/dev/sda3 /boot ext3 defaults 0 2
/dev/mapper/vg00-home /home ext3 defaults 0 2
/dev/mapper/vg00-tmp /tmp ext3 defaults 0 2
/dev/mapper/vg00-usr /usr ext3 defaults 0 2
/dev/mapper/vg00-var /var ext3 defaults 0 2
/dev/sda2 none swap sw 0 0
/dev/sdb2 none swap sw 0 0
/dev/sdc2 none swap sw 0 0
# /dev/sdd2 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
- edit /boot/grub/menu.lst , 新しい/bootと/rootの位置に path を変更。/bootは/dev/sda3なのでroot (hd0,2), kernel root optionとして実際の/の位置 (表記が/dev/vg00/rootでは無く/dev/mapper/vg00-rootである事に注意)
title initrd.img-2.6.17-2-amd64
root (hd0,2)
kernel /vmlinuz-2.6.17-2-amd64 root=/dev/mapper/vg00-root ro
initrd /initrd.img-2.6.17-2-amd64
savedefault
- boot loader を MBR へ書き込み
# grub
grub> device (hd0) /dev/sda
grub> root (hd0,2)
grub> setup (hd0)
grub> quit
- rebootでRAID5+LVM2のシステムへ
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg00-root 705512 165024 504648 25% /
udev 10240 68 10172 1% /dev
devshm 500476 0 500476 0% /dev/shm
/dev/sda3 186671 25734 151298 15% /boot
/dev/mapper/vg00-home 92891128 5757032 82415504 7% /home
/dev/mapper/vg00-tmp 10321208 154240 9642680 2% /tmp
/dev/mapper/vg00-usr 10321208 1055296 8741624 11% /usr
/dev/mapper/vg00-var 807112304 246857180 519256212 33% /var
- /dev/sddのpartitionを切る (sdd1はmd0の一部になるので、sda1,sdb1,sdc1と全く同じに)
sdd: sdd1 320GB fd, sdd2 500MB 82
- reboot (rebootしないと新しいpartition tableが認識されなかった。?)
- RAID5 recovery
# mdadm /dev/md0 --add /dev/sdd1
# cat /proc/mdstat
Personalities : [raid5] [raid4]md0
: active raid5 sdd1[4] sda1[0] sdc1[2] sdb1[1]
936042624 blocks level 5, 128k chunk, algorithm 2 [4/3] [UUU_]
[===>.................] recovery = 15.3% (47947392/312014208)
finish=71.0min speed=61934K/sec unused devices: <none>
-
# mkswap /dev/sdd2
- /etc/fstabに追加
/dev/sdd2 none swap sw 0 0
kernel compile
root-on-LVM2-on-RAID5のときのinitrdの作り方が良く分らなかったんだが、–initrdをmake-kpkgで付けてcompileした新しいkernelで問題無くbootした。
# make-kpkg --initrd --revision=custom.1.0 kernel_image