9-7. SunOS 4.1.4 のディスクの扱い (1) SunOS 4.1.4 マシン現状の確認 * マシンの確認と故障ディスクの処置 ST1480N FUJITSU HP C3323 SunOS 4.1.4-JLE -------------↓--↓--- --↓-- SPARCstation 2 | 筐体 □ □ |-------| □ | 増設するハ−ドディスク ---------------------- SCSI ------ # df Filesystem kbytes used avail capacity Mounted on /dev/sd0a 15487 10272 3667 74% / << sd0は Seagate ST1480N、 /dev/sd0g 148887 126077 7922 94% /usr フォ−マット容量426MB。 /dev/sd0h 193591 144280 29952 83% /home /dev/sd2g 471326 299480 124714 71% /sun << sd2 は FUJITSU の方。 SunOS 4.1.4、SPARCstation 2 の筐体には Seagate ST1480N と FUJITSU MODEL M2624FA というディスクが1個ずつ入っていた。何年かぶりに起動したら、FUJITSU のディスクの 方は壊れていた。パ−ティション /dev/sd2g の /sun が FUJITSU のディスクで、このパ −ティションには SPARCprinter, newsprint, SunSolve, ioffice, openware, tmp, lang, demo などが入っていた。これらメ−ルの機能には関係ないので、Seagateのディスクだけ 有効にすればこのマシン、まだ一役買ってくれるかも知れない。それにしても FUJITSUの ディスク、えらく時代がかったディスクだった。 壊れていても format コマンドではディスクの名前は出て来る。ディスクの一部が壊れて いるようである。でも、そのままにしておくと、起動して来る時にディスクのエラ−表示 がディスプレイにずっと出て、login まで来ないことになってしまう。 Stop+A を押して、 ok boot -s でシンクルユ−ザモ−ドで起動し、/etc/fstab ファイルを修正して壊れたデ ィスクをマウントしないようにする。vi がうまく動作しないが下記のように #/dev/sd2g とシャ−プを入れるか、この一行を消すだけなので何とかできる。 /etc/fstab *** パ−ティションの名前は Solaris とは異なることに注意 *** -------------------------------------- |/dev/sd0a / 4.2 rw 1 1 << パ−ティション a は root。 |/dev/sd0g /usr 4.2 rw 1 2 << パ−ティション g は usr。 |/dev/sd0h /home 4.2 rw 1 3 |#/dev/sd2g /sun 4.2 rw 1 4 << ここ、マウントしないようにした。 |/home/swapfile swap swap rw 0 0 << パ−ティション b は swap という。 |/dev/fd0 /pcfs pcfs rw,noauto 0 0 # ls -l /home/swapfile -rw------T 1 root 52428800 Feb 14 2001 swapfile # pstat -s *** 現在のスワップの状態を出す *** 1248k allocated + 356k reserved = 1604k used, 82348k available # format AVAILABLE DISK SELECTIONS: 0. sd0 at esp0 slave 24 sd0: 1. sd2 at esp0 slave 16 sd2: Specify disk (enter its number): 0 selecting sd0: [disk formatted, defect list found] Warning: Current Disk has mounted partitions. format> partition partition> p Current partition table (original sd0): partition a - starting cyl 0, # blocks 33120 (46/0/0) partition b - starting cyl 46, # blocks 65520 (91/0/0) partition c - starting cyl 0, # blocks 828720 (1151/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 137, # blocks 317520 (441/0/0) partition h - starting cyl 578, # blocks 412560 (573/0/0) /etc/format.dat ここの値と上記は一致する。該当部所のみ表示 --------------------------------------------------------------------------- |disk_type = "SUN0424" \ | : ctlr = SCSI : fmt_time = 4 \ | : trks_zone = 9 : asect = 2 \ | : ncyl = 1151 : acyl = 2 : pcyl = 2500 : nhead = 9 : nsect = 80 \ | : rpm = 4400 : bpt = 26000 誰かが調べたのがこのようにそこらにある。該当部所のみ表示した。しかし値は違ってい る。下の scsiinfo で出てきたのと一致する。 http://www.eits.uga.edu/ssg/resources/Master_Sun_Format.dat.txt --------------------------------------------------------------- |disk_type = "Seagate ST1480N" \ | :ctlr =SCSI : fmt_time =4 \ | :trks_zone =9 : asect =4 \ | :ncyl=1456 : acyl=2 : pcyl=1476 : nhead=9 : nsect=64 \ | :rpm=4400 : bpt=37037 # scsiinfo -F /dev/rsd0c partition のとこは、このコマンドが気 disk_type = "SEAGATE ST1480 SUN0424" \ を利かせて、 パ−ティション c だけ作 : ctlr = SCSI : fmt_time = 1 \ る場合の情報を出しているのである。 : trks_zone = 9 : asect = 2 \ : ncyl = 1462 : acyl = 2 : pcyl = 1476 : nhead = 9 : nsect = 64 \ : rpm = 4412 : bpt = 37632 partition = "SEAGATE ST1480 SUN0424" \ : disk = "SEAGATE ST1480 SUN0424" : ctlr = SCSI \ : c = 0, 842112 * パ−ティション c で全部にする # scsiinfo -F /dev/rsd1c << キャラクタデバイス( RAWデバイス )を指定する。 scsiinfo: Drive doesn't report rpm; assuming 3600. disk_type = "HP C3323-300" \ : ctlr = SCSI : fmt_time = 3 \ : trks_zone = 6723 : atrks = 490 : asect = 0 \ : ncyl = 2445 : acyl = 2 : pcyl = 2982 : nhead = 7 : nsect = 120 \ : rpm = 3600 : bpt = 70560 partition = "HP C3323-300" \ : disk = "HP C3323-300" : ctlr = SCSI \ : c = 0, 2053800 # cd /etc # cp format.dat format.dat.org << 一応ちゃんとバックアップをとっておく。 # scsiinfo -F /dev/rsd1c > PPP scsiinfo: Drive doesn't report rpm; assuming 3600. # cat PPP >> format.dat << format.dat の最後に上記の出力を追加する。 # format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. sd0 at esp0 slave 24 sd0: 1. sd1 at esp0 slave 8 sd1: 2. sd2 at esp0 slave 16 sd2: Specify disk (enter its number): 1 << 増設したディスクを指定すること。 間違 えるとえらいことになる。 AVAILABLE DRIVE TYPES: 0. Quantum ProDrive 80S << ファイル format.dat の disk_type のと | ころがずらっと出て来る。 other は自分 7. SUN0424 でその場で、 ジオメトリ値を入力する場 8. SUN0535 合に指定する。例えば disk_type のエン 9. SUN0669 トリ SUN2.1G のとこを消すなり、# コメ 10. SUN1.0G ントにすると、ここには出なくなる。 11. SUN1.05 12. SUN1.3G 13. SUN2.1G 14. HP C3323-300 15. m2624fa << エントリ m2624fa は format.dat にはな 16. other い。ディスクから直接取ってきている。 Specify disk type (enter its number): 14 selecting sd1: [disk formatted, no defect list found] FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk repair - repair a defective sector show - translate a disk address label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels quit format> format Ready to format. Formatting cannot be interrupted and takes 15 minutes (estimated). Continue? y Beginning format. The current time is Tue Mar 18 17:04:01 2003 Formatting...done Verifying media... << ここまででも20分位かかった。 pass 0 - pattern = 0xc6dec6de 2444/5/114 pass 1 - pattern = 0x6db6db6d << 10分ぐらいかかった。 2444/5/114 Total of 0 defective blocks repaired. format> partition << 略してただの p でもいい。 PARTITION MENU: a - change `a' partition b - change `b' partition c - change `c' partition d - change `d' partition e - change `e' partition f - change `f' partition g - change `g' partition h - change `h' partition select - select a predefined table name - name the current table print - display the current table label - write partition map and label to the disk quit partition> select 0. HP C3323-300 << select とやったら、HPうんぬんだけ出た。 Specify table (enter its number) [0]: 0 これを選んで format.dat の"partition" 情報を元に c パ−ティションだけとした。 partition> print Current partition table (HP C3323-300): partition a - starting cyl 0, # blocks 0 (0/0/0) partition b - starting cyl 0, # blocks 0 (0/0/0) partition c - starting cyl 0, # blocks 2053800 (2445/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 0, # blocks 0 (0/0/0) partition h - starting cyl 0, # blocks 0 (0/0/0) partition> label Ready to label disk, continue? y << ラベルを付けるで、 パ−ティション情報 がディスクに書き込まれる。 partition> quit format> quit # # format << 増設したディスクがどうなったか確認する。 Searching for disks...done AVAILABLE DISK SELECTIONS: 0. sd0 at esp0 slave 24 sd0: 1. sd1 at esp0 slave 8 sd1: << ラベルが付けらた 2. sd2 at esp0 slave 16 ので unknownでな sd2: くなっている。 Specify disk (enter its number): 1 selecting sd1: [disk formatted, defect list found] # newfs /dev/rsd1c << 論理フォ−マット。数分で終わった。 /dev/rsd1c: 2053800 sectors in 2445 cylinders of 7 tracks, 120 sectors 1051.5MB in 153 cyl groups (16 c/g, 6.88MB/g, 3136 i/g) super-block backups (for fsck -b #) at: 32, 13600, 27168, 40736, 54304, 67872, 81440, 95008, 107552, | この間十数行 1452064, 1465632, 1479200, 1492768, 1505312, 1518880, 1532448, 1546016, 1559584, 1573152, 1586720, 1600288, 1612832, 1626400, 1639968, 1653536, 1667104, 1680672, 1694240, 1707808, 1720352, 1733920, 1747488, 1761056, 1774624, 1788192, 1801760, 1815328, 1827872, 1841440, 1855008, 1868576, 1882144, 1895712, 1909280, 1922848, 1935392, 1948960, 1962528, 1976096, 1989664, 2003232, 2016800, 2030368, 2042912, # mount /dev/sd1c /sun << マウントしてみる。ブロックデバイスを指定すること。 # df Filesystem kbytes used avail capacity Mounted on /dev/sd0a 15487 6529 7410 47% / /dev/sd0g 148887 128429 5570 96% /usr /dev/sd0h 193591 149627 24605 86% /home /dev/sd1c 964457 9 868003 0% /sun # cd /sun; ls -F lost+found/ << newfs をやると lost+found だけできる。 # touch PPP; ls -F << 早速、何ぞファイル PPP を作ってみた。 PPP lost+found/ # cd / << /sun から出ておかないとアンマウントできない。 # umount /dev/sd1c << マウントを外す。# umount /sun でもいい。 (2) 予備ディスクの作成 dump コマンド編 * パ−ティションを切る準備 既存、外付けのディスクそれぞれを format コマンドの partition で、 パ−ティション のサイズとディスクの容量を見て、外付けディスクのパ−ティションのサイズを決める。 << 既存ディスクのパ−ティション >> 1シリンダは 9*80*512=368640 bytes。 ↓ ↓ sd0: partition a - starting cyl 0, # blocks 33120 (46/0/0) partition b - starting cyl 46, # blocks 65520 (91/0/0) partition c - starting cyl 0, # blocks 828720 (1151/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 137, # blocks 317520 (441/0/0) << 137=46+91。 partition h - starting cyl 578, # blocks 412560 (573/0/0) ↑ ↑ 578 番のシリンダから 412560 ブロックを使う。(573/0/0)は 573 個分 のシリンダを使うということ。578+573=1151 で全部使い切っている。 上記のパ−ティション a の容量:33120*512=16957440、 (9*80*512)*46=16957440 bytes。 dfで出て来る容量:15487*1024=15858688 bytes、パ−ティション a の容量が一致しない。 これはファイルシステムが、10%ほどリザ−ブするようになっているためらしい。 # df Filesystem kbytes used avail capacity Mounted on /dev/sd0a 15487 6561 7378 47% / /dev/sd0g 148887 128442 5557 96% /usr /dev/sd0h 193591 149627 24605 86% /home << 外付けディスクのパ−ティション >> こっちは1シリンダ 7*120*512=430080 bytes。 ↓ ↓ sd1: partition a - starting cyl 0, # blocks 0 (0/0/0) partition b - starting cyl 0, # blocks 0 (0/0/0) partition c - starting cyl 0, # blocks 2053800 (2445/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 0, # blocks 2053800 (2445/0/0) partition h - starting cyl 0, # blocks 0 (0/0/0) 外付けディスクの方が既存ディスクより、1シリンダ当たりの容量は大きい。そのため大 は小を兼ねるということで、シリンダの数は既存ディスクと同じにしてしまう。余った容 量はパ−ティション h に残り全部を割り当てることにする。 * パ−ティションを切る # format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. sd0 at esp0 slave 24 sd0: 1. sd1 at esp0 slave 8 sd1: 2. sd2 at esp0 slave 16 sd2: Specify disk (enter its number): 1 selecting sd1: [disk formatted, defect list found] FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk repair - repair a defective sector show - translate a disk address label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels quit format> p << partion の p。 PARTITION MENU: a - change `a' partition | h - change `h' partition select - select a predefined table name - name the current table print - display the current table label - write partition map and label to the disk quit partition> p << print の p、現在の状態を表示する。 Current partition table (original sd1): partition a - starting cyl 0, # blocks 0 (0/0/0) partition b - starting cyl 0, # blocks 0 (0/0/0) partition c - starting cyl 0, # blocks 2053800 (2445/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 0, # blocks 2053800 (2445/0/0) partition h - starting cyl 0, # blocks 0 (0/0/0) partition> a partition a - starting cyl 0, # blocks 0 (0/0/0) Enter new starting cyl [0]: Enter new # blocks [0, 0/0/0]: 46/0/0 partition> b partition b - starting cyl 0, # blocks 0 (0/0/0) Enter new starting cyl [0]: 46 Enter new # blocks [0, 0/0/0]: 91/0/0 partition> g partition g - starting cyl 0, # blocks 2053800 (2445/0/0) Enter new starting cyl [0]: 137 Enter new # blocks [1938720, 2308/0/0]: 441/0/0 partition> h partition h - starting cyl 0, # blocks 0 (0/0/0) Enter new starting cyl [0]: 578 Enter new # blocks [0, 0/0/0]: 1867/0/0 partition> p Current partition table (unnamed): partition a - starting cyl 0, # blocks 38640 (46/0/0) partition b - starting cyl 46, # blocks 76440 (91/0/0) partition c - starting cyl 0, # blocks 2053800 (2445/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 137, # blocks 370440 (441/0/0) partition h - starting cyl 578, # blocks 1568280 (1867/0/0) partition> label Ready to label disk, continue? y partition> q format> q # * 論理フォ−マットをする # newfs /dev/rsd1a /dev/rsd1a: 38640 sectors in 46 cylinders of 7 tracks, 120 sectors 19.8MB in 3 cyl groups (16 c/g, 6.88MB/g, 3136 i/g) super-block backups (for fsck -b #) at: 32, 13600, 27168, ス−パ−ブロックは1つのパ−ティションの中に幾つも作られるとのこと。このパ−ティ ションでは先頭から 32 ブロック目、13600 ブロック目、27168 ブロック目のとこにある。 # newfs /dev/rsd1b /dev/rsd1b: 76440 sectors in 91 cylinders of 7 tracks, 120 sectors 39.1MB in 6 cyl groups (16 c/g, 6.88MB/g, 3136 i/g) super-block backups (for fsck -b #) at: 32, 13600, 27168, 40736, 54304, 67872, # newfs /dev/rsd1g /dev/rsd1g: 370440 sectors in 441 cylinders of 7 tracks, 120 sectors 189.7MB in 28 cyl groups (16 c/g, 6.88MB/g, 3136 i/g) super-block backups (for fsck -b #) at: 32, 13600, 27168, 40736, 54304, 67872, 81440, 95008, 107552, 121120, 134688, 148256, 161824, 175392, 188960, 202528, 215072, 228640, 242208, 255776, 269344, 282912, 296480, 310048, 322592, 336160, 349728, 363296, # newfs /dev/rsd1h /dev/rsd1h: 1568280 sectors in 1867 cylinders of 7 tracks, 120 sectors 803.0MB in 117 cyl groups (16 c/g, 6.88MB/g, 3136 i/g) super-block backups (for fsck -b #) at: 32, 13600, 27168, 40736, 54304, 67872, 81440, 95008, 107552, 121120, 134688, 148256, 161824, 175392, 188960, 202528, 215072, 228640, 242208, 255776, 269344, 282912, 296480, 310048, 322592, 336160, 349728, 363296, 376864, 390432, 404000, 417568, 430112, 443680, 457248, 470816, 484384, 497952, 511520, 525088, 537632, 551200, 564768, 578336, 591904, 605472, 619040, 632608, 645152, 658720, 672288, 685856, 699424, 712992, 726560, 740128, 752672, 766240, 779808, 793376, 806944, 820512, 834080, 847648, 860192, 873760, 887328, 900896, 914464, 928032, 941600, 955168, 967712, 981280, 994848, 1008416, 1021984, 1035552, 1049120, 1062688, 1075232, 1088800, 1102368, 1115936, 1129504, 1143072, 1156640, 1170208, 1182752, 1196320, 1209888, 1223456, 1237024, 1250592, 1264160, 1277728, 1290272, 1303840, 1317408, 1330976, 1344544, 1358112, 1371680, 1385248, 1397792, 1411360, 1424928, 1438496, 1452064, 1465632, 1479200, 1492768, 1505312, 1518880, 1532448, 1546016, 1559584, [ ここからは少なくとも、シングルユ−ザモ−ドで作業する ] # kill 1 << シングルユ−ザモ−ドにする。Stop+A で ok boot -s とやってもいい。 # ps -ax PID TT STAT TIME COMMAND 0 ? D 0:00 swapper 1 ? IW 0:00 /sbin/init -s 2 ? D 0:00 pagedaemon 37 co S 0:00 - (sh) 44 co R 0:00 ps -ax * ファイルシステムをコピ−する パ−ティション b は swap のためコピ−しない、しても意味がない。 パ−ティション c はディスク全体のためコピ−しない。他のパ−ティションをコピ−してから、c をコピ− するとおかしくなってしまう。ここでは、それぞれのパ−ティションをコピ−するために /sun というマウントポイントを使い回しする。Device busy ともし出たら、 カレントデ ィレクトリが /sun の中にいるためである。慎重に作業されたい。 # mount /dev/sd1a /sun << ル−トパ−ティション a をコピ−した例。容量は少な # cd /sun いので1分もかからず終わった。 # dump 0f - /dev/rsd0a | restore xf - DUMP: Date of this level 0 dump: Wed Mar 19 16:44:39 2003 DUMP: Date of last level 0 dump: the epoch DUMP: Dumping /dev/rsd0a (/) to standard output DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 15132 blocks (7.39MB) on 0.21 tape(s). DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] Warning: ./lost+found: File exists DUMP: 15132 blocks (7.39MB) on 1 volume DUMP: DUMP IS DONE set owner/mode for '.'? [yn] y << 何じゃこれは、y にしておけばいいみたい。 # cd / # umount /dev/sd1a # mount /dev/sd1g /sun << パ−ティション g のコピ−。 # cd /sun # dump 0f - /dev/rsd0g | restore xf - # cd / # umount /dev/sd1g # mount /dev/sd1h /sun << パ−ティション h のコピ−。 # cd /sun # dump 0f - /dev/rsd0h | restore xf - # cd / # umount /dev/sd1h * boot ファイルを入れる パ−ティション a、ル−トのファイルシステムをコピ−してから、installboot コマンド でブ−トブロックを、外付けディスクのパ−ティション a に書き込む。 # cd /usr/kvm/mdec; ls bootfd bootsd installboot rawboot # installboot -vlt /boot bootsd /dev/rsd1a *** これではダメだった *** Primary boot: bootsd Secondary boot: /boot Boot device: /dev/rsd1a bootfile /boot not on bootdevice /dev/rsd1a # mount /dev/sd1a /sun *** こういうようにする *** # cd /usr/kvm/mdec # installboot -vlt /sun/boot bootsd /dev/rsd1a Primary boot: bootsd Secondary boot: /sun/boot オプション -vlt はなしでも構わない。このよう Boot device: /dev/rsd1a に表示されるのみ。# man installboot でマニュ Block locations: アルが出る。ブ−トブロックだけは dump コマン startblk size ドではコピ−されないというか、中身を作り直す 1210 10 必要があるらしい。マニュアルを読まれたい。 1220 10 1230 10 | 1290 10 12a0 10 12b0 10 12c0 10 40c0 10 40d0 10 Bootblock will contain a.out header Boot size: 0x1af10 Boot checksum: 0x3a5a8103 Boot block installed * 外付けディスクの /etc/fstab をいじる /sun/etc/fstab *** sd0a,sd0g,sd0h を変更する *** -------------------------------------- |/dev/sd1a / 4.2 rw 1 1 壊れた内臓ディスクを取り外し、この外 |/dev/sd1g /usr 4.2 rw 1 2 付けディスクに付け替えるなら、 fstab |/dev/sd1h /home 4.2 rw 1 3 もいじる必要はない。ただ緊急時に、コ |/home/swapfile swap swap rw 0 0 ンピュ−タの筐体を開けて、冷静に素早 |/dev/fd0 /pcfs pcfs rw,noauto 0 0 く作業できるかということである。 * 外付けディスクでブ−トする マシンの起動時に表示されるのを見ていると、Boot device: /sbus/esp@0,800000/sd@3,0 というのが見える。 # << Stop+A で OpenBoot モ−ドに入る。probe-scsi、show-devs という ok devalias コマンドも使える。go で元の画面に戻ることができる。 | disk /sbus/esp@0,800000/sd@3,0 disk3 /sbus/esp@0,800000/sd@0,0 disk2 /sbus/esp@0,800000/sd@2,0 disk1 /sbus/esp@0,800000/sd@1,0 disk0 /sbus/esp@0,800000/sd@3,0 | ok boot disk1 << これでOK。booot /sbus/esp@0,800000/sd@1,0 でもいい。 おお−、これでできたぞ。外付けディスクから立ち上がって、login したらまるでディス クがどれだったかなんて分からない。何とか、これで Solaris 2.6 でもできそうだ。 # df *** こんなようになりました *** Filesystem kbytes used avail capacity Mounted on /dev/sd1a 18079 6577 9695 40% / /dev/sd1g 173779 128430 27972 82% /usr /dev/sd1h 736386 149616 513132 23% /home (3) 予備ディスクの作成 dd コマンド編 * 方法 ジオメトリが異なるディスクで、強制的に既存ディスクと同じジオメトリで物理フォ−マ ットしてみる。これで問題なく物理フォ−マットできれば、同じジオメトリを持つディス クということで、dd コマンドでディスクイメ−ジによるコピ−ができるのでないか。 パ −ティション c をコピ−すれば、 ディスクのラベル情報やブ−トブロックも全部コピ− することになる。 * 強制的に同じディスクのジオメトリで物理フォ−マットする # format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. sd0 at esp0 slave 24 sd0: 1. sd1 at esp0 slave 8 sd1: << これは HP C3323-300 だが、 2. sd2 at esp0 slave 16 いろいろフォ−マットでい sd2: じっている内にこんなよう Specify disk (enter its number): 1 になってしまった。 selecting sd1: [disk formatted, defect list found] FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk repair - repair a defective sector show - translate a disk address label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels quit format> type AVAILABLE DRIVE TYPES: 0. Quantum ProDrive 80S | 15. HP C3323-300 16. HARU 17. m2624fa 18. other Specify disk type (enter its number) [16]: 15 selecting sd1: [disk formatted, no defect list found] format> c << currentの略。15番のディスクの情報を表示してみる。 Current Disk = sd1: format> type AVAILABLE DRIVE TYPES: 0. Quantum ProDrive 80S | 7. SUN0424 | 15. HP C3323-300 16. HARU << これは、 今フォ−マットしようとしているディスクの 17. m2624fa 名前である。 ディスクに書かれているのを取っている。 18. other Specify disk type (enter its number) [15]: 18 << 一応ジオメトリ情報は、 手動で Enter number of data cylinders: 1151 入力する。または "7. SUN0424" Enter number of alternate cylinders [2]: 2 を選んでもいいのでないか。 Enter number of physical cylinders [1153]: 2500 Enter number of heads: 9 Enter number of data sectors/track: 80 Enter rpm of drive [3600]: Enter disk type name (remember quotes): KATOU << 今度は KATOU という名前にして selecting sd1: みる。何となく/etc/format.dat [disk formatted, no defect list found] に disk_type = "KATOU" と追加 No defined partition tables. されるような気がするが、ない。 format> format Ready to format. Formatting cannot be interrupted and takes 7 minutes (estimated). Continue? y << フォ−マットしますか?。 7分 Beginning format. The current time is Tue Mar 25 17:09:00 2003 程かかるよ。 Formatting...done Verifying media... pass 0 - pattern = 0xc6dec6de 1150/8/62 pass 1 - pattern = 0x6db6db6d 1150/8/62 Total of 0 defective blocks repaired. ここまで10分ぐらいかかった。 format> p PARTITION MENU: a - change `a' partition | h - change `h' partition select - select a predefined table name - name the current table print - display the current table label - write partition map and label to the disk quit partition> p 物理フォ−マットしたてのパ−ティションの状態です。 Current partition table (unnamed): partition a - starting cyl 0, # blocks 0 (0/0/0) partition b - starting cyl 0, # blocks 0 (0/0/0) partition c - starting cyl 0, # blocks 0 (0/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 0, # blocks 0 (0/0/0) partition h - starting cyl 0, # blocks 0 (0/0/0) partition> c partition c - starting cyl 0, # blocks 0 (0/0/0) Enter new starting cyl [0]: << Return キ−を押して 0 を選択。 Enter new # blocks [0, 0/0/0]: 1151/0/0 << 1151/0/0 と入力した。 partition> p Current partition table (unnamed): partition a - starting cyl 0, # blocks 0 (0/0/0) partition b - starting cyl 0, # blocks 0 (0/0/0) partition c - starting cyl 0, # blocks 828720 (1151/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 0, # blocks 0 (0/0/0) partition h - starting cyl 0, # blocks 0 (0/0/0) partition> label Ready to label disk, continue? y << ラベルを付ける。 # format AVAILABLE DISK SELECTIONS: 0. sd0 at esp0 slave 24 sd0: 1. sd1 at esp0 slave 8 sd1: 2. sd2 at esp0 slave 16 sd2: * いよいよ dd コマンドでコピ−してみる # << Stop+A シングルユ−ザモ−ドでここから作業する。 ok boot -s # dd if=/dev/rsd0c of=/dev/rsd1c << パ−ティション c を先に作っておかない /dev/rsd1c: No such device or address けないということ。newfsまでは必要ない。 # dd if=/dev/rsd0c of=/dev/rsd1c bs=63b << 63ブロックずつコピ−する。 ものの数 13154+1 records in 分で済んだ。bs=63b 指定なしだと1ブロ 13154+1 records out ックずつのコピ−で、 30分たっても終 ↑ わらなかった。 途中何も表示しないので、 正常にコピ−が終了した場合は、 やっているのかと思った。最後に 13154+ ここ1 のとこは 0 か 1 である。 うんぬんと結果が出て来る。 # mount /dev/sd1c /sun # cd /sun; vi etc/fstab 外付けディスクの /etc/fstab を修正する。 # << Stop+A ok boot disk1 外付けディスクを指定して起動する。 # format AVAILABLE DISK SELECTIONS: 0. sd0 at esp0 slave 24 sd0: 1. sd1 at esp0 slave 8 sd1: 第1セクタに書かれているラベル情報も、 そのまま sd0 のがコピ−されてしまったので sd1 のディスクの名前も SUN0424 となり、ジオメトリ情報も全部 sd0 と同じになってし まった。しかし物理的なディスクの情報は変わらない。 # scsiinfo -f /dev/rsd1c で見 ると以前と変わらず Model: C3323-300 と出て来る。 ディスクのディフェクトリスト(欠陥リスト)はどうなっているか。# format の defect の print で sd0 と sd1 のを見てみた。sd0 は total of 61 defects。sd1 のは 116 と 出た。ディスクイメ−ジで全部コピ−したなら、この欠陥リストもコピ−されたのでない のか。どうやら欠陥リストは、別な場所に入っているようである。 # format 0. sd0 at esp0 slave 24 sd0: 1. sd1 at esp0 slave 8 sd1: Specify disk (enter its number): 1 format> defect DEFECT MENU: restore - set working list = current list original - extract manufacturer's list from disk extract - extract working list from disk add - add defects to working list delete - delete a defect from working list print - display working list dump - dump working list to file load - load working list from file commit - set current list = working list create - recreates maufacturers defect list on disk quit defect> p num cyl hd bfi len sec 1 18 6 0 | 116 2936 2 0 << シリンダの 2936番がおかしいと total of 116 defects. 出ている。2936 番は物理的なシ リンダのことである。 * fsck でディスクのチェックをしてみる 一応、起動ディスクは元に戻している。/dev/sd1c はマウントもしていない。 fsck はシ ングルユ−ザモ−ドでやるようにと書かれているので。# fsck /dev/rsd1c 指定でもいい、 チェックが速くなるという。でも # fsck /dev/sd1c のままでも、問題がなければ数秒で 終わる。 # fsck /dev/sd1c ** /dev/sd1c ** Last Mounted on / ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 1104 files, 6652 used, 8835 free (75 frags, 1095 blocks, 0.5% fragmentation) (4) dd コマンドで第1セクタをスキップする * 第1セクタにあるラベル情報 ディスクの第1セクタにあるラベル情報はコピ−しないようにするには。コピ−のサイズ はデフォルトは1ブロックのため、ibs=1b と obs=1b の指定は必要ない。 ただし、上記 の bs=63b という指定はそもそもできないし、ここではしてはいけない。 注.1) コピ−先のディスクにちゃんとパ−ティションも区切ったラベルを設定しておくこ と。第1セクタを抜かしてコピ−するため、コピ−先のディスクはコピ−する前の ままとなる。全部コピ−する場合は、ラベル情報もコピ−されるが。 注.2) ブロックは0番から数える。セクタは1番から数える。1ブロックは通常1ブロッ ク=512バイト=1セクタである。しかし、dd コマンドの skip と seekの値は ibs のブロック数がベ−スとなる。ibs=100b で skip=1 なら、512バイト*100ブロ ック分、100セクタ分スキップすることになる。 入力の最初から1ブロックを1個スキップする。 出力で1ブロック目から書き込む。 今は1ブロック=512バイト=1セクタなの 今は1ブロック=1セクタなので で、つまり1セクタ、スキップするということ。 第2セクタから書込むことになる。 ↓ ↓ # dd if=/dev/rsd0c ibs=1b skip=1 of=/dev/rsd1c obs=1b seek=1 または # dd if=/dev/rsd0c skip=1 of=/dev/rsd1c seek=1 dd: write: Error 0 828719+0 records in << やってみました。約70分かかりました。 828719+0 records out # mount /dev/sd1c /sun << 確認!。マウントできる。 ok boot disk1 << fsck でス−パブロックを修正し、再度 boot disk1 とした | ら rsd1a,g も stable と出た。これで問題ないようである。 checking filesystems /dev/rsd1a: 1103 files, 6812 used, 8675 free /dev/rsd1a: (75 flags, 1075 blocks, 0.5% fragmentation) /dev/rsd1g: 12281 files, 128442 used, 20445 free /dev/rsd1g: (365 flags, 2510 blocks, 0.2% fragmentation) /dev/rsd1h: is stable. | # fsck /dev/sd1c ** /dev/sd1c ** Last Mounted on / ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups CLEAN FLAG IN SUPERBLOCK IS WRONG; FIX? y << もう一度 fsck やったら、ここは出 なくなった。 1104 files, 6825 used, 8662 free (70 flags, 1074 blocks, 0.5% fragmentation) * dd コマンドで seek=2 だと思い試したところ # dd if=/dev/rsd0c skip=1 of=/dev/rsd1c seek=2 dd: write: Error 0 828719+0 records in << このコマンドはただ物理的にコピ−するだけなので、問題 828719+0 records out はない。 # mount /dev/sd1c /sun << でも、おかしいマウントできない。 # fsck /dev/rsd1c << こんなエラ−が出る。# format でパ−ティションなんか見 ** /dev/rsd1c ても問題ないように見える。 BAD SUPER BLOCK: MAGIC NUMBER WRONG | この後2行続く。 (5) マルチユ−ザモ−ドで dd コピ−したら * マルチユ−ザモ−ドで dd コピ−したら Apollo から telnet で入って dd コマンドを打った。コピ−後 # mount /dev/sd1c /sun して、vi /sun/etc/fstab を修正した。それから Stop+A を押し、ok boot disk1 で外付 けディスクから起動した。起動時のディスプレイに出て来るログは、別に変わらない。再 び Apollo から telnet したが、別に何も問題なかった。マルチユ−ザモ−ドで dd コピ −しても、そうそう問題は起きないのでないか。多分メ−ルストアのホストならsendmail と POP サ−バを止めておけばいいのでないか。 WWWホストでも、WWWサ−バのログ がちょっとおかしくなる程度というか。問題が起きるとしたら、RDBMS を動かしているよ うな場合、デ−タの追加とか消去で整合性がおかしくなるのでないのか。 # dd if=/dev/rsd0c of=/dev/rsd1c bs=10b << 10ブロック単位でコピ−してみた。 82872+0 records in 3分ぐらいで終わった。 82872+0 records out # ps -ax PID TT STAT TIME COMMAND 0 ? D 0:01 swapper 1 ? IW 0:00 /sbin/init - 2 ? D 0:00 pagedaemon 54 ? IW 0:00 portmap 59 ? IW 0:00 keyserv 78 ? IW 0:00 syslogd 93 ? IW 0:00 /usr/etc/cesd 94 ? S 0:00 /usr/etc/ccv -f 95 ? S 0:00 /usr/etc/kkcv -f 99 ? S 0:01 update 104 ? IW 0:00 inetd 107 ? S 0:00 in.telnetd 106 co IW 0:00 - cons8 console (getty) 108 p0 S 0:00 -csh (csh) 117 p0 R 0:00 ps -ax * 別なディスクでも試してみる 昔 Apollo 用で購入した SCSI ハ−ドディスクで、箱を開けて中のディスクを見たらブラ ンド名は何も書いてなかった。SUN0424 ディスクとはジオメトリ値は下記のように異なっ ている。ディスクは1メガということで買った。強制的に内臓ディスクと同じジオメトリ 値で物理フォ−マットして、dd コマンドでそのままコピ−した。全然問題ないみたい。 # scsiinfo scsiinfo: WARNING: compiled for SunOS 4.1.3; this is SunOS 4.1.4-JL. Results may esp0: sd1 tgt 1 lun 0: be incorrect. Synchronous(4.0MB/sec) Clean CanReconnect esp0: sd0 tgt 3 lun 0: Synchronous(4.0MB/sec) Clean CanReconnect # scsiinfo -F /dev/rsd1 << rsd1a でも rsd1bでも、構わないの /dev/rsd1: No such file or directory で何かパ−ティションの識別記号を scsiinfo: Cannot access device, giving up. 入れること。 # scsiinfo -F /dev/rsd1c scsiinfo: Drive doesn't report rpm; assuming 3600. disk_type = "HP C3324A" \ : ctlr = SCSI : fmt_time = 3 \ : trks_zone = 11111 : atrks = 455 : asect = 0 \ : ncyl = 3361 : acyl = 2 : pcyl = 3703 : nhead = 5 : nsect = 140 \ : rpm = 3600 : bpt = 82320 partition = "HP C3324A" \ : disk = "HP C3324A" : ctlr = SCSI \ : c = 0, 2352700 # format AVAILABLE DISK SELECTIONS: 0. sd0 at esp0 slave 24 sd0: 1. sd1 at esp0 slave 8 sd1: Specify disk (enter its number): 1 AVAILABLE DRIVE TYPES: << ディスクがで | ラベルを付けてないと、先ずフォ− 7. SUN0424 マットするメニュ−が出て来る。 | Specify disk type (enter its number): 7 << SUN0424 のジオメトリでフォ−マッ selecting sd1: トしてしまう。これは物理フォ−マ [disk formatted, no defect list found] ットというより論理フォ−マットと 言った方がいいと思う。 FORMAT MENU: disk - select a disk | format> format Ready to format. Formatting cannot be interrupted and takes 10 minutes (estimated). Continue? y Beginning format. The current time is Tue Apr 8 14:01:42 2003 Formatting...done Verifying media... << ここまでで10分ぐらい。 pass 0 - pattern = 0xc6dec6de 1150/8/62 pass 1 - pattern = 0x6db6db6d 1150/8/62 Total of 0 defective blocks repaired. << 数字がで出して終わりまで10分。 format> p PARTITION MENU: | partition> p << もうパ−ティションも出来ていた。 Current partition table (SUN0424_PREINSTALL): partition a - starting cyl 0, # blocks 33120 (46/0/0) partition b - starting cyl 46, # blocks 131040 (182/0/0) partition c - starting cyl 0, # blocks 828720 (1151/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 228, # blocks 288000 (400/0/0) partition h - starting cyl 628, # blocks 376560 (523/0/0) partition> q format> q # /etc/format.dat これを見て上記のパ−ティションは切られた。関係する所のみ。 ----------------------------------------------------------------------------- |partition = "SUN0424_PREINSTALL" \ | : disk = "SUN0424" : ctlr = SCSI \ | : a = 0, 33120 : b = 46, 131040 : c = 0, 828720 : g = 228, 288000 \ | : h = 628, 376560 # dd if=/dev/rsd0c of=/dev/rsd1c bs=10b << これも10分ぐらい。bs 指定無しだ 82872+0 records in とすごくかかる。sd1ディスクをマウ 82872+0 records out ントし fstab を修正し、ブ−トする。 ------------------------------------------------------------------------------------ [ 付録 ] dump コマンドの使い方の確認、ディスクの修復など * dump コマンドの使い方の確認 既にパ−ティション g というのを作ってある。# format コマンドの partition> g を指 定して、パ−ティション c を全部、g に割り振った。パ−ティション g は一応、ユ−ザ 用の場所という意味で、ニュ−テックの外付けディスクなんか、全部 g にしている。 # format AVAILABLE DISK SELECTIONS: 0. sd0 at esp0 slave 24 sd0: 1. sd1 at esp0 slave 8 sd1: Specify disk (enter its number): 1 selecting sd1: [disk formatted, defect list found] format> p | partition> p Current partition table (HP C3323-300): partition a - starting cyl 0, # blocks 0 (0/0/0) partition b - starting cyl 0, # blocks 0 (0/0/0) partition c - starting cyl 0, # blocks 2053800 (2445/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 0, # blocks 0 (0/0/0) partition h - starting cyl 0, # blocks 0 (0/0/0) partition> g partition g - starting cyl 0, # blocks 0 (0/0/0) Enter new starting cyl [0]: << Return キ−をそのまま押すと、[0] の値 Enter new # blocks [0, 0/0/0]: 2445/0/0 を取る。次は 2445 シリンダ分確保。 partition> p Current partition table (unnamed): partition a - starting cyl 0, # blocks 0 (0/0/0) partition b - starting cyl 0, # blocks 0 (0/0/0) partition c - starting cyl 0, # blocks 2053800 (2445/0/0) partition d - starting cyl 0, # blocks 0 (0/0/0) partition e - starting cyl 0, # blocks 0 (0/0/0) partition f - starting cyl 0, # blocks 0 (0/0/0) partition g - starting cyl 0, # blocks 2053800 (2445/0/0) partition h - starting cyl 0, # blocks 0 (0/0/0) partition> label Ready to label disk, continue? y # mount /dev/sd1g /sun << # mount /dev/sd1c /sun でも、g=c だか # df らこの場合同じことである。 Filesystem kbytes used avail capacity Mounted on /dev/sd0a 15487 6545 7394 47% / /dev/sd0g 148887 128429 5570 96% /usr /dev/sd0h 193591 149627 24605 86% /home /dev/sd1g 964457 9 868003 0% /sun # cd /sun # dump 0f - /dev/rsd0a | restore xf - << これでいい。 パ−ティションのバックア ップのコピ−はこれでいい。 # cd /sun # dump 0f - /dev/rsd0a | restore rf - << restore rf だと /sun に余分なファイル restoresymtable ができる。 こんなのは # ls -al res* ディスクのフルバックアップに必要ない。 -rw-r--r-- 1 root 103220 Mar 19 16:30 restoresymtable [ AをBにコピ−する一般的な使い方 ] # dump 0uf B A << 一般的にはAはコピ−元のディスク。Bはコピ−先のテ−プ。 0 はダンプレベルで全部とる。1 以上だとインクリメンタルバックアップで更新されたの をとる。u はダンブの時刻などログをとる、/etc/dumpdates ファイルに記録される。 ダ ンプレベルが 1 以上の場合、dumpdates ファイルが参照される。 * 壊れたディスクを修復してみる # fsck /dev/rsd2g ** /dev/rsd2g ** Last Mounted on /sun ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts LINK COUNT DIR I=107587 OWNER=root MODE=40755 SIZE=512 MTIME=Oct 1 16:04 1991 COUNT 1 SHOULD BE 2 ADJUST? y LINK COUNT FILE I=107588 OWNER=root MODE=100755 SIZE=94 MTIME=Oct 1 16:04 1991 COUNT 1 SHOULD BE 2 ADJUST? y LINK COUNT FILE I=107589 OWNER=root MODE=100755 SIZE=94 MTIME=Oct 1 16:04 1991 COUNT 1 SHOULD BE 2 ADJUST? y LINK COUNT FILE I=107590 OWNER=root MODE=100755 SIZE=102 MTIME=Oct 1 16:04 1991 COUNT 1 SHOULD BE 2 ADJUST? y LINK COUNT FILE I=107600 OWNER=root MODE=100644 SIZE=16464 MTIME=Nov 26 18:24 1993 COUNT 2 SHOULD BE 1 ADJUST? y ** Phase 5 - Check Cyl groups FREE BLK COUNT(S) WRONG IN SUPERBLK SALVAGE? y CLEAN FLAG IN SUPERBLOCK IS WRONG; FIX? y 11227 files, 312919 used, 158407 free (1791 frags, 19577 blocks, 0.4% fragmentation) ***** FILE SYSTEM WAS MODIFIED *****