存储 频道

FreeBSD中磁盘的使用方法(9)

 
12.9.8 紧急恢复程序
 
12.9.8.1 在出现灾难前
 
在遇到任何的灾难前,你只需要做以下四个步骤: 
 
打出你的每个磁盘驱动器代号(例如: disklabel da0 | lpr),文件系统表(/etc/fstab) ,以及所有的启动信息,并保留两份。
 
确定遇到情况时,用来启动及修复的软盘(boot.flp、fixit.flp) 具有你所有的设备代号(并且能够使用)。最简单的方法是用软盘启动,然后检查启动信息,如果你的设备都有被列出,并且可以正常使用,就可以跳到第三步。
 
否则,你必须建立两张传统的可启动软盘,并包含fdisk、disklabel、newfs、mount 以及你所使用的备份程序。这些程序必需被静态连接。如果你使用的是dump,那么这张软盘就必需包含restore。
 
定期将资料备份到磁带。任何在你上次备份后的改变都无法恢复。记得将磁带写保护。
 
测试你在第二步所建立的软盘及备份的磁带,将过程记录下来,并和这张可启动的软盘、磁带放在一起。也许你在回存时会想要,而这份记录将防止你破坏你的磁带(怎么说呢?因为你可能将tar xvf /dev/rsa0 打成tar cvf /dev/rsa0 而重写了你的备份磁带)。
 
为了安全,你可以每次都做两份备份磁带及一张启动磁盘,并将其中一份备份磁带存放在远方。远方不是指同一栋办公大楼的地下室(世贸中心的一些公司应该学到了一些教训),而是真的要让你的磁带离你的计算机远远的。
 
以下是一个建立启动磁盘的shell script 例子: 
#!/bin/sh 
# create a restore floppy 
# format the floppy 
PATH=/bin:/sbin:/usr/sbin:/usr/bin 
fdformat -q fd0 
if [ $? -ne 0 ] 
then 
echo "Bad floppy, please use a new one" 
exit 1 
 
fi 
# place boot blocks on the floppy 
disklabel -w -B /dev/fd0c fd1440 
# newfs the one and only partition 
newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/fd0a 
# mount the new floppy 
mount /dev/fd0a /mnt 
# create required directories 
#  
mkdir /mnt/dev 
mkdir /mnt/bin 
mkdir /mnt/sbin 
mkdir /mnt/etc 
mkdir /mnt/root 
mkdir /mnt/mnt # for the root partition 
mkdir /mnt/tmp 
mkdir /mnt/var 
# populate the directories 
if [ ! -x /sys/compile/MINI/kernel ] 
then 
cat << EOM 
The MINI kernel does not exist, please create one. 
Here is an example config file: 
# MINI -- A kernel to get FreeBSD on onto a disk. 
machine "i386" 
cpu "I486_CPU" 
ident MINI
maxusers 5 
options INET # needed for _tcp _icmpstat _ipstat 
# _udpstat _tcpstat _udb 
options FFS #Berkeley Fast File System 
options FAT_CURSOR #block cursor in syscons or pccons 
options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device 
options NCONS=2 #1 virtual consoles 
options USERCONFIG #Allow user configuration with -c XXX 
config kernel root on da0 swap on da0 and da1 dumps on da0 
controller isa0 
controller pci0 
controller fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr 
disk fd0 at fdc0 drive 0 
controller ncr0 
controller scbus0
device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr 
device npx0 at isa? port "IO_NPX" irq 13 vector npxintr 
device da0 
device da1 
device da2 
device sa0 
pseudo-device loop # required by INET 
pseudo-device gzip # Exec gzipped a.out's 
EOM 
exit 1 
fi 
cp -f /sys/compile/MINI/kernel /mnt 
gzip -c -best /sbin/init > /mnt/sbin/init 
gzip -c -best /sbin/fsck > /mnt/sbin/fsck 
gzip -c -best /sbin/mount > /mnt/sbin/mount
gzip -c -best /sbin/halt > /mnt/sbin/halt 
gzip -c -best /sbin/restore > /mnt/sbin/restore 
gzip -c -best /bin/sh > /mnt/bin/sh 
gzip -c -best /bin/sync > /mnt/bin/sync 
cp /root/.profile /mnt/root 
cp -f /dev/MAKEDEV /mnt/dev 
chmod 755 /mnt/dev/MAKEDEV 
chmod 500 /mnt/sbin/init 
chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt 
chmod 555 /mnt/bin/sh /mnt/bin/sync 
chmod 6555 /mnt/sbin/restore 
# create the devices nodes 
cd /mnt/dev 
./MAKEDEV std 
 
./MAKEDEV da0 
./MAKEDEV da1 
./MAKEDEV da2 
./MAKEDEV sa0 
./MAKEDEV pty0 
cd / 
# create minimum filesystem table 
cat > /mnt/etc/fstab <<EOM 
/dev/fd0a / ufs rw 1 1 
EOM 
# create minimum passwd file 
cat > /mnt/etc/passwd <<EOM 
root:*:0:0:Charlie &:/root:/bin/sh 
EOM 
 
cat > /mnt/etc/master.passwd <<EOM 
root::0:0::0:0:Charlie &:/root:/bin/sh 
EOM 
chmod 600 /mnt/etc/master.passwd 
chmod 644 /mnt/etc/passwd 
/usr/sbin/pwd_mkdb -d/mnt/etc /mnt/etc/master.passwd 
# umount the floppy and inform the user 
/sbin/umount /mnt 
echo "The floppy has been unmounted and is now ready."
0
相关文章