FreeBSD が立ち上がらなくなった時,フロッピーディスクから立ち上げてバック アップする方法. # ここで作ったフロッピーよりも # http://www.infonets.hiroshima-u.ac.jp/~taoka/FreeBSD/FreeBSD.html # の方が良い. 1. UFS の FD を作成. # fdformat fd0.1440 # disklabel -r -w -B fd0.1440 fd1440 # newfs -c 1 -i 3072 -o space -m 0 fd0.1440 参考.1. 小松直人,1 枚の FD で実現するルーターの構築法,UNIX USER, pp.46-53,1996/2 2. http://www.jp.freebsd.org/QandA/ (Q and A 管理番号:320) 2. FD を マウント # mount /dev/fd0 /fd 3. FD 用 kernel 作成. 作業するマシンの環境,目的にあった config ファイルを作成する. なお,FD は容量が小さいので必要最小限のデバイスのみ組み込むようにす る. 例.目的: / パーティションが壊れて立ち上がらなくなった FreeBSD の /home 以下をバックアップする. バックアップ方法: 1) ネットワークを使う. 2) MO を使う. 今回は 1) の方法でやった.この時の config ファイルは最後に付けた. # config FDKERN ディレクトリ移動して # make depend; make ※ make install は絶対にしてはいけない. 4. 出来た kernel を圧縮し FD へ. # kzip kernel すると kernel.kz というファイルになるので,これを FD に kernel とし てコピー. # cp kernel.kz /fd/kernel 5. FD 上にディレクトリ作成. # cd /fd # mkdir bin dev etc sbin home tmp var home, tmp, var はマウントポイントなので別の名前でも可. 6. FD 上にデバイスファイルを作成. 1) 必須デバイスファイル作成. # cd /fd/dev # /dev/MAKEDEV std fd0 pty0 2) 1) で作成したデバイスファイルには余計な物もあるので削除. 削除するのは, ttyp{a-v}, ptyp{a-v} ※ 他に作成するデバイスファイルが無ければ削除しなくても良い.今 回は容量不足で他のデバイスファイルを作れなかったので削除した. 3) 他に必要なデバイスファイルを作る. 今回は SCSI HDD をアクセスするので sd0 を追加する. /dev/MAKEDEV を書き換える必要があるのでコピーする. # cp /dev/MAKEDEV /tmp /tmp/MAKEDEV を編集.編集箇所は次の 1 ヶ所. -------------------------------------------------------------- *** /dev/MAKEDEV Wed Jun 18 21:16:57 1997 --- /tmp/MAKEDEV Tue Dec 2 14:51:01 1997 *************** *** 425,431 **** [0-9]|[0-9][0-9]|[0-4][0-9][0-9]|50[0-9]|51[0-1]) for slicepartname in s0h s1 s2 s3 s4 do ! sh MAKEDEV $name$unit$slicepartname done case $name in od|sd) --- 425,431 ---- [0-9]|[0-9][0-9]|[0-4][0-9][0-9]|50[0-9]|51[0-1]) for slicepartname in s0h s1 s2 s3 s4 do ! sh /tmp/MAKEDEV $name$unit$slicepartname done case $name in od|sd) -------------------------------------------------------------- デバイスファイル作成. # cd /fd/dev # /tmp/MAKEDEV sd0 # /tmp/MAKEDEV sd0s2a 7. 必要なコマンドを FD にコピー. コピーするコマンドは /bin, /sbin にある物に限定する./usr/bin 等に あるコマンドはライブラリを参照するので必要なライブラリやライブラリ を読むための設定が必要になる. インストールするコマンドはすべて gzip で圧縮する. 例.# cd /tmp; cp /bin/sh . # gzip -9 sh これで sh.gz が出来るので,これを sh としてインストールする. # cp sh.gz /fd/bin/sh 1) 必須コマンド. /bin/{sh, ls, pwd} /sbin/{fsck, init, mount, umount} /bin/sh は /bin/-sh にリンクを張る. # cd /fd/bin # ln sh -sh 2) ほかに必要なコマンドをインストールする.例えば以下のコマンド. /bin/{cat, cp, rm, stty} 3) 今回インストールしたコマンドは /bin: -sh* cp* ls* rm* sh* sync* cat* df* pwd* rmdir* stty* /sbin: fsck* init* mount_nfs* umount* ifconfig* mount* nfsiod* 8. /etc/rc ファイルを作成. 必要に応じたファイルを作る.今回は以下のファイル. -------------------------------------------------------------- #!/bin/sh PATH=/sbin:/bin export PATH stty status '^T' stty erase '^H' echo 'Set network' ifconfig lo0 inet 127.0.0.1 ifconfig ep0 inet 133.13.64.192 netmask 0xffffff00 #ifconfig vx0 inet 192.168.39.23 netmask 0xffffff00 nfsiod -n 2 <--- NFS クライアントデーモン ifconfig -a exec sh -------------------------------------------------------------- 9. 作成した FD で起動.バックアップ開始. 1) バックアップの必要があるパーティションを read only でマウント. # mount -o ro /dev/sd0s2h /home fsck をかけないとマウントできない場合もある.その時は # fsck -y /dev/sd0s2h としてから mount コマンドを実行. 2) mibai:/home/nfs/tecA101 をマウント. # mount -t nfs mibai:/home/nfs/tecA101 /tmp 3) ファイルを転送. # cp -pR /home /tmp/tecA192 4) アンマウント. # umount /home # umount /tmp 10. バックアップ終了. ※ kernel config ファイル.まだ不要なデバイスも含まれている. -------------------------------------------------------------- # tecA192 rescue kernel 1997/12/3 machine "i386" cpu "I586_CPU" cpu "I686_CPU" ident FDKERN maxusers 5 <--- 1 でも良いか. options INET #InterNETworking options FFS #Berkeley Fast Filesystem options NFS #Network Filesystem options PROCFS #Process filesystem options "COMPAT_43" #Compatible with BSD 4.3 [KEEP THIS!] options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device options BOUNCE_BUFFERS #include support for DMA bounce buffers #options UCONSOLE #Allow users to grab the console #options FAILSAFE #Be conservative options USERCONFIG #boot -c editor options VISUAL_USERCONFIG #visual boot -c editor ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ISA バスのボードを使う時は USERCONFIG, VISUAL_USERCONFIG のオプション は残しておくと便利.ディスクに余裕があれば残そう. config kernel root on fd0 controller isa0 controller pci0 controller fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr disk fd0 at fdc0 drive 0 # SCSI driver controller ahc0 controller scbus0 device sd0 device od0 #See LINT for possible `od' options. # syscons is the default console driver, resembling an SCO console device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr device npx0 at isa? port "IO_NPX" irq 13 vector npxintr # シリアルポートは不要のはず. device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr device ep0 at isa? port 0x300 net irq 10 vector epintr #device vx0 pseudo-device loop <--- ネットワークを使うなら必須. pseudo-device ether <--- ネットワークを使うなら必須. pseudo-device log <--- これは要らないか. pseudo-device sl 1 <--- これは要らないか. # ijppp uses tun instead of ppp device #pseudo-device ppp 1 pseudo-device tun 1 <--- これは要らないか. pseudo-device pty 16 <--- これは要らないか. pseudo-device gzip <--- 必須. --------------------------------------------------------------