既にひと月も前の事になりますが、ファイル保存に使用しているネットワーク・ハードディスクHDL-GS500が故障してしまいました。その後、復旧まで時間がかかりましたが、試行錯誤の後にデータを救出することができ、HDL-GS500を再セットアップする目処が立ちましたので、忘れないうちに修復の記録を書いていきます。
故障時の症状
9月の中旬ごろのことでした。前日まで普通に使えていたのですが、その日は電源を入れて暫く経っても緑ランプの点滅状態が続き、そのまま待っていても起動完了状態になりませんでした。
マニュアルを読んでみると、緑点滅中はシステム処理中のため、電源を切ったり、リセットしないようにと書かれているので、そのままにして翌日まで様子を見ることに。
しかし翌日になっても緑ランプの点滅状態が続いており、接続できない状態に変化は無く。しかたがないのでリセットボタンを押してみましたが、リセットもできない状態になっており、やむなくコンセントを抜きました。
その後、再び電源を入れてみましたが同じ症状のままで、起動完了できない状態に変化はありませんでした。とうとう壊れてしまったか…と、がっかりしてしまいました。
幸いにも、保存データのうちのほとんどは、別のハードディスクにバックアップを取っていたので助かったのですが、このHDL-GS500の中には、まだバックアップできていないデータが残ってしまいました。
(昨今の電力事情により、ふだん使用しないときには、本体の電源を切るようにしていました。)
HDD修復のための情報収集
壊れてしまったHDL-GS500の修理と、HDDのデータ救出について、どんな方法があるか調べてみました。
わかったことは、
- HDDの中にHDL-GS500自身のシステム領域があるので、HDDの交換だけでは復旧できない。
- データ領域のファイルシステムはxfs。しかしx86のLinuxマシンにmountして読みだすことができない。エンディアンの違いらしい。
- 第1パーティションの中に、初期化用のファイルがある。
- 内部の基板には、シリアルコンソール用の空パターンがある。
現状でHDDのデータを読み出すためには、HDL-GS500のシステムを修復して正常に起動できれば、保存データを読み出すことができるようになる、というのが結論でした。なんだかなぁ…ですが、考えてみれば確かにそのとおりです。
システム修復のためには二つの選択肢が考えられました。一つは、正常動作している同機種を入手して、HDDのシステム領域をまるごとコピーする方法。 もう一つは、壊れたHDDの中から, 修復に必要な初期化用のファイルを取り出方法です。
うまくいくかは、とにかくやってみないと判らない状態でしたが、先ずは後者の方法で進めることにしました。
HDL-GS500のパーティション構成
これまで調べた情報から、HDL-GS500内部HDDのパーティション構成は、6個のパーティションに分割されていることが分かりました。また、内部のシステム上ではHDDドライブをhdbとして認識しています。
それぞれのパーティション構成は、以下のようになっているようです。
hdb1 bootイメージ ext3 基本領域 hdb2 システムファイル ext3 基本領域 hdb3 swap swap 基本領域 hdb4 Extended 拡張領域 hdb5 アプリケーション用 ext3 論理領域 hdb6 データ用領域 xfs 論理領域HDL-GS500に保存したデータは、hdb6の領域に入っています。初期化に必要なファイルは、hdb1の.landiskディレクトリの中にある、sd1.tgz, sd2.tgz, sd5.tgz, sd6.tgz, tar2diskのファイルということがわかりました。
シリアルコンソールから接続してみる
はじめに動作状態を見るために、HDL-GS500を分解して、シリアルコンソール接続用のコネクタを取り付けました。まずは、問題が起こっているところの状況確認がしたい、といった目的です。
Webの情報によると、HDL-GS500のシリアル信号レベルが3.3Vらしいので、レベル変換回路を経由してUSB-シリアル変換ケーブルでPCに接続しました。使ったレベル変換回路は数年前のトラ技の付録基板です、レベル変換にADM3202ANを実装しています。トラ技のいろいろな付録基板の中で、この付録基板はとても役に立っています。
シリアルコンソールへの接続はTeraTermProで行いました。
ボーレート 115200 データ 8 bit パリティ none ストップビット 1 bit フロー制御 noneこの設定で接続できました。ログインパスワードはログイン名と同じでした。
電源ボタンを押し、起動中の状態をシリアルコンソールから観察してみると、起動途中でエラーが発生しているようでログインすることができませんでした。電源を入れ直し何回か再起動するうちに、ようやくログインまで辿り着いたと思うと、しばらく操作しているうちにエラーが発生し、それ以降は操作不能状態になってしまいました。
end_request: I/O error, dev hdb, sector 871610等のエラーメッセージが出ているので、やはりディスクに問題があるようでした。
下はシリアルコンソールに出力されたメッセージです。
Storlink CIR Initialization... SL-Boot Loader for IO-Data HDL-GS [Linux], version 1.0.9.05_sata_bootp Built by linux, 14:01:37, Oct 31 2007 Processor: SL3516c2 CPU Rate: 300000000 AHB Bus Clock:150MHz Ratio:2/1 MAC 1 Address: XX:XX:XX:XX:XX:XX MAC 2 Address: XX:XX:XX:XX:XX:XX inet addr: 192.168.0.200/255.255.255.0 Kernel RAM Location: 0x01600000 Filename: zImage.gs Initrd RAM Location: 0x00800000 Filename: rd.gz.gs Waiting for disk ready & detect ... Sending Reset... IDE 0 Detect disk 0 Disk Drive: IDE-0, Device-0, 976773168 Sectors 500 GB 139 MB Partition 1: Linux 626535 Sectors 320 MB ==> enter ^C to abort booting within 3 seconds ...... Load rd.gz.gs size 2049090...OK. Load zImage.gs size 1828248...OK. Uncompressing Linux................................................................................................................ done, booting the kernel. Linux version 2.6.15 (root@devsrv) (gcc version 3.4.4 20041218 (prerelease) (Debian 3.4.3-1)) #2 Thu May 14 13:19:40 JST 2009 CPU: FA526id(wb) [66015261] revision 1 (ARMv4) Machine: GeminiA Ignoring unrecognised tag 0x00000000 Memory policy: ECC disabled, Data cache writeback CPU0: D VIVT write-back cache CPU0: I cache: 16384 bytes, associativity 2, 16 byte lines, 512 sets CPU0: D cache: 8192 bytes, associativity 2, 16 byte lines, 256 sets Built 1 zonelists Kernel command line: root=/dev/hdb2 ro mem=64M console=ttySL0,115200 initrd=0x00800000,16M PID hash table entries: 512 (order: 9, 8192 bytes) Bus: 150MHz(2/1) Console: colour dummy device 80x30 sl2312 console setup : Disable IDE...config to SATA mode Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) Inode-cache hash table entries: 8192 (order: 3, 32768 bytes) Memory: 64MB = 64MB total Memory: 44288KB available (2761K code, 1241K data, 100K init) Mount-cache hash table entries: 512 *** Page_chain_cachep Init!*** CPU: Testing write buffer coherency: ok checking if image is initramfs...it isn't (no cpio magic); looks like an initrd Freeing initrd memory: 16384K NET: Registered protocol family 16 PCI: bus0: Fast back to back transfers disabled sl2312_pci_map_irq : slot = 0 pin = 1 SCSI subsystem initialized usbcore: registered new driver usbfs usbcore: registered new driver hub NetWinder Floating Point Emulator V0.97 (double precision) VFS: Disk quotas dquot_6.5.1 Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) NTFS driver 2.1.25 [Flags: R/O]. fuse init (API version 7.3) SGI XFS with large block numbers, no debug enabled SGI XFS Quota Management subsystem Initializing Cryptographic API io scheduler noop registered io scheduler cfq registered Real Time Clock Driver v0.10 Gemini Gpio init Register Gemini Power control Power event by Unknow Source Watchdog Timer Initialized Storm crypto Initialization ttySL0 at MMIO 0x42000000 (irq = 18) is a SL2312 RAMDISK driver initialized: 16 RAM disks of 16384K size 1024 blocksize loop: loaded (max 8 devices) ipddp.c:v0.01 8/28/97 Bradford W. Johnsonipddp0: Appletalk-IP Encap. mode by Bradford W. Johnson VSC-switch not found Storm Semiconductors,Inc. SL351x Giga Ethernet driver 0.1.7 built at May 14 2009 11:43:02 Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx ide 1: physical = 63400000, virtual = c4800000, irq = 5 ide0: MMIO-DMA , BIOS settings: hda:pio, hdb:pio MASTER not exist hdb: ST3500820AS, ATA DISK drive hdb speed:U6 (66MHz)(0x46) ide0 at 0xc4800020-0xc4800027,0xc4800036 on irq 5 hdb: max request size: 1024KiB hdb: 976773168 sectors (500107 MB) w/8192KiB Cache, CHS=60801/255/63 hdb: cache flushes supported hdb: hdb1 hdb2 hdb3 hdb4 < hdb5 hdb6 > SL2312 MTD Driver Init....... sl2312flash_init: value=0x82c22035 sl2312flash_init: value=0x82c22025 after mask SL2312 CFI Flash: Found 1 x16 devices at 0x0 in 16-bit bank Amd/Fujitsu Extended Query Table at 0x0040 SL2312 CFI Flash: CFI does not contain boot bank location. Assuming top. number of CFI chips: 1 cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness. Creating 2 MTD partitions on "SL2312 CFI Flash": 0x00000000-0x00070000 : "SL boot" 0x00070000-0x00080000 : "VCTL" SL2312 MTD Driver Init Success ...... FTC_FOTG2XX_1 : Init FOTG2XX Driver Init FOTG2xx driver FTC_FOTG2XX_1 : >>> Found FOTG2XX ... pFTC_OTG_1 c16212a0 hcd->self.controller c16b3c00 hcd end hcd_buffer_create ehci-hcd-FOTG2XX-1 ehci-hcd-FOTG2XX-1: new USB bus registered, assigned bus number 1 usb_register_bus ghcd_FOTG2XX_1 hcd c16b3c00 hcd_irq_For_OTG_1 ehci->caps->length 10, hcd->regs f6900000 , ehci->regs f6900010 udev->state 1 drivers/usb/host/ehci-hcd-FOTG2XX-1.c: USB support enabled, EHCI rev 101. 0 Timing on EOF1(0xf6900040) = 0xd hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected FTC_FOTG2XX_1 : >>> +FOTG2XX_get_otg_transceiver_1 FTC_FOTG2XX_1 : registered host c16b3c00 OTG2XX act as HOST only (don't need to wait gadget driver) +(OTGC_Init_1) pFTC_OTG_1->otg.default_a=1 +(OTGC_Init_1) pFTC_OTG_1->otg.default_a=1 OTG_enable_VBUS FTC_FOTG2XX_1 : >>> Drive VBUS ok... +OTGP_Close_1() OTG2XX act as HOST only (remove gadget function) +OTGH_Open_1()(0x30=0x0) OTG_enable_VBUS mdwOTGC_Control_A_VBUS_VLD_Rd 80000 +OTGP_Close_1() OTG2XX act as HOST only (remove gadget function) +OTGH_Open_1()(0x30=0x0) ehci otg_set_host status 0 connect_change 1 clear_bit return set_bit usbcore: registered new driver usblp drivers/usb/class/usblp.c: v0.13: USB Printer Device Class driver Initializing USB Mass Storage driver... usbcore: registered new driver usb-storage USB Mass Storage support registered. FTC_FOTG200_udc : Init USB device Lower driver FOTG200_BASE_ADDRESS = 0xf6800000 ******reg_val = a2822025 FTC_FOTG200_udc : ***** FOTG200 Peripheral 2.0 Test program ***** FTC_FOTG200_udc : L0: System initial, Please wait... FTC_FOTG200_udc : L1: System is ready(dev->EPUseDMA=0xff)... FTC_usb_probe end mice: PS/2 mouse device common for all mice ipsec_init : cryptographic accelerator ipsec tx_desc = ffc10000 ipsec rx_desc = ffc11000 ipsec tx_desc_dma = 016d9000 ipsec rx_desc_dma = 016da000 NET: Registered protocol family 2 IP route cache hash table entries: 1024 (order: 0, 4096 bytes) TCP established hash table entries: 4096 (order: 2, 16384 bytes) TCP bind hash table entries: 4096 (order: 2, 16384 bytes) TCP: Hash tables configured (established 4096 bind 4096) TCP reno registered TCP bic registered NET: Registered protocol family 1 NET: Registered protocol family 17 NET: Registered protocol family 5 RAMDISK: Compressed image found at block 0 EXT2-fs warning: checktime reached, running e2fsck is recommended VFS: Mounted root (ext2 filesystem). /initrd/linuxrc ===== SoC arch is FA526id root device is /dev/hdb2 ===== kjournald starting. Commit interval 5 seconds EXT3-fs warning: maximal mount count reached, running e2fsck is recommended EXT3 FS on hdb5, internal journal EXT3-fs: mounted filesystem with ordered data mode. modprobe: cannot parse modules.dep mount: mounting /dev/sdz1 on /mnt/usb1 failed mount: mounting /dev/sdz on /mnt/usb1 failed mount: mounting /dev/scd0 on /mnt/usb1 failed kjournald starting. Commit interval 5 seconds EXT3-fs: mounted filesystem with ordered data mode. kjournald starting. Commit interval 5 seconds EXT3-fs warning: maximal mount count reached, running e2fsck is recommended EXT3 FS on hdb5, internal journal EXT3-fs: mounted filesystem with ordered data mode. mke2fs 1.40-WIP (14-Nov-2006) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 1280 inodes, 10240 blocks 512 blocks (5.00%) reserved for the super user First data block=1 2 block groups 8192 blocks per group, 8192 fragments per group 640 inodes per group Superblock backups stored on blocks: 8193 Writing inode tables: 0/21/2done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 25 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. Model Number : ST3500820AS Firmware Rev.: SD3A Serial No. : XXXXXXXX This is not Target(S.M.A.R.T. Error) *** This is not Target *** *** sghddchk_check : Not Target HDD *** *** hdb5: hddupstart is not found *** rmmod: sr_mod: No such file or directory rmmod: cdrom: No such file or directory === linuxrc end kjournald starting. Commit interval 5 seconds EXT3-fs: mounted filesystem with ordered data mode. VFS: Mounted root (ext3 filesystem) readonly. Trying to move old root to /initrd ... okay Freeing init memory: 100K INIT: version 2.86 booting Setting parameters of disc: (none). Activating swap...Adding 2104504k swap on /dev/hdb3. Priority:-1 extents:1 across:2104504k done. Checking root file system...fsck 1.40-WIP (14-Nov-2006) e2fsck 1.40-WIP (14-Nov-2006) /dev/hdb2 has been mounted 71 times without being checked, check forced. Pass 1: Checking inodes, blocks, and sizes /dev/hdb2: |= | 1.4% /dev/hdb2: |== / 4.2% /dev/hdb2: |===== - 9.8% /dev/hdb2: |======= \ 12.6% /dev/hdb2: |========= | 16.8% /dev/hdb2: |============= / 22.4% /dev/hdb2: |================ - 28.0% /dev/hdb2: |================ \ 29.4% /dev/hdb2: |=================== | 33.6% /dev/hdb2: |==================== / 36.4% /dev/hdb2: |====================== - 39.2% /dev/hdb2: |======================= \ 40.6% /dev/hdb2: |======================== | 43.4% /dev/hdb2: |========================= / 44.8% /dev/hdb2: |========================== - 46.2% /dev/hdb2: |=========================== \ 47.6% /dev/hdb2: |=========================== | 49.0% /dev/hdb2: |============================ / 50.4% /dev/hdb2: |============================== - 53.2% /dev/hdb2: |=============================== \ 54.6% /dev/hdb2: |=============================== | 56.0% /dev/hdb2: |================================ / 57.4% /dev/hdb2: |================================= - 58.8% /dev/hdb2: |=================================== \ 63.0% /dev/hdb2: |===================================== | 65.8% /dev/hdb2: |====================================== / 67.2% Pass 2: Checking directory structure /dev/hdb2: |======================================= - 70.4% /dev/hdb2: |======================================== \ 71.1% /dev/hdb2: |======================================== | 71.7% /dev/hdb2: |========================================= / 73.2% /dev/hdb2: |========================================= - 74.1% /dev/hdb2: |========================================== \ 75.3% /dev/hdb2: |=========================================== | 76.5% /dev/hdb2: |============================================ / 77.8% /dev/hdb2: |============================================ - 78.0% /dev/hdb2: |============================================ \ 78.1% /dev/hdb2: |============================================ | 79.3% /dev/hdb2: |============================================= / 79.7% /dev/hdb2: |============================================= - 79.8% /dev/hdb2: |============================================= \ 80.5% /dev/hdb2: |============================================= | 80.6% /dev/hdb2: |============================================= / 80.8% /dev/hdb2: |============================================= - 80.9% /dev/hdb2: |============================================= \ 81.0% /dev/hdb2: |============================================= | 81.1% /dev/hdb2: |============================================== / 81.3% /dev/hdb2: |============================================== - 82.1% /dev/hdb2: |============================================== \ 82.8% /dev/hdb2: |=============================================== | 83.1% /dev/hdb2: |=============================================== / 83.3% /dev/hdb2: |=============================================== - 83.6% /dev/hdb2: |=============================================== \ 83.9% /dev/hdb2: |=============================================== | 84.0% /dev/hdb2: |=============================================== / 84.2% /dev/hdb2: |=============================================== - 84.4% /dev/hdb2: |=============================================== \ 84.5% /dev/hdb2: |=============================================== | 84.8% /dev/hdb2: |================================================ / 85.0% /dev/hdb2: |================================================ - 85.1% /dev/hdb2: |================================================ \ 85.2% /dev/hdb2: |================================================ | 85.3% /dev/hdb2: |================================================ / 86.1% /dev/hdb2: |================================================ - 86.6% /dev/hdb2: |================================================= \ 86.8% /dev/hdb2: |================================================= | 87.5% /dev/hdb2: |================================================= / 88.4% /dev/hdb2: |================================================== -89.5% Pass 3: Checking directory connectivity /dev/hdb2: |===================================================\92.0% Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/hdb2: |====================================================== | 97.1% /dev/hdb2: |======================================================== | 99.9% /dev/hdb2: 10912/51600 files (1.5% non-contiguous), 219403/409601 blocks done. EXT3 FS on hdb2, internal journal Setting the system clock.. Cleaning up ifupdown.... Loading kernel modules...done. Loading device-mapper support. Checking file systems...fsck 1.40-WIP (14-Nov-2006) done. Setting kernel variables...done. Mounting local filesystems...kjournald starting. Commit interval 5 seconds EXT3-fs: mounted filesystem with ordered data mode. kjournald starting. Commit interval 5 seconds EXT3-fs warning: maximal mount count reached, running e2fsck is recommended EXT3 FS on hdb5, internal journal EXT3-fs: mounted filesystem with ordered data mode. XFS mounting filesystem hdb6 Starting XFS recovery on filesystem: hdb6 (logdev: internal) Ending XFS recovery on filesystem: hdb6 (logdev: internal) Using fallback suid method done. Activating swapfile swap...done. Setting up networking.... Starting hotplug subsystem: pci pci [success] usb usb [success] isapnp isapnp [success] ide ide [success] input input [success] scsi scsi [success] done. Configuring network interfaces...GMAC-0 Addr 1 Vendor ID: XXXXXXXXXX mii_write: phy_addr=0x1 reg_addr=0x4 value=0x5e1 mii_write: phy_addr=0x1 reg_addr=0x9 value=0x300 mii_write: phy_addr=0x1 reg_addr=0x18 value=0x41 mii_write: phy_addr=0x1 reg_addr=0x0 value=0x9200 mii_write: phy_addr=0x1 reg_addr=0x0 value=0x1200 Link Up (0x796d) MII REG 10 = 0x2800 1000M/Full Flow Control Enable. Storlink eth0 address = XXXXXXXXXXXX Enable MAC Flow Control... Using fallback suid method info, udhcpc (v0.9.9-pre+autoip) started SIOCSIFFLAGS: Cannot assign requested address SIOCSIFADDR: File exists SIOCSIFFLAGS: Cannot assign requested address SIOCSIFFLAGS: Cannot assign requested address debug, Sending discover... debug, Sending select for 192.168.XXX.XXX.. info, Lease of 192.168.XXX.XXX obtained, lease time 3600 SIOCSIFFLAGS: Cannot assign requested address deleting routers SIOCDELRT: No such process adding dns 192.168.XXX.XXX done. hdb: dma_timer_expiry: dma status == 0x41 hdb: dma_intr: status=0x71 { DriveReady DeviceFault SeekComplete Error } hdb: dma_intr: error=0x04 { DriveStatusError } ide: failed opcode was: unknown hda: DMA disabled hdb: DMA disabled ide0: reset timed-out, status=0xb0 hdb: status timeout: status=0xb0 { Busy } ide: failed opcode was: unknown hdb: drive not ready for command ide0: reset timed-out, status=0xb0 end_request: I/O error, dev hdb, sector 871610 end_request: I/O error, dev hdb, sector 5671944 Buffer I/O error on device hdb5, logical block 499 lost page write due to I/O error on hdb5 end_request: I/O error, dev hdb, sector 643436 end_request: I/O error, dev hdb, sector 5671946 end_request: I/O error, dev hdb, sector 5671948 end_request: I/O error, dev hdb, sector 5671950 journal_bmap: journal block not found at offset 268 on hdb2 Aborting journal on device hdb2. end_request: I/O error, dev hdb, sector 642896 Buffer I/O error on device hdb2, logical block 148 lost page write due to I/O error on hdb2 end_request: I/O error, dev hdb, sector 5671952 Buffer I/O error on device hdb5, logical block 503 lost page write due to I/O error on hdb5 end_request: I/O error, dev hdb, sector 643426 end_request: I/O error, dev hdb, sector 643428 end_request: I/O error, dev hdb, sector 643430 end_request: I/O error, dev hdb, sector 643432 Aborting journal on device hdb5. end_request: I/O error, dev hdb, sector 871610 do_generic_mapping_read page not uptodate twice, error=--EIO!!! ext3_abort called. EXT3-fs error (device hdb2): ext3_journal_start_sb: Detected aborted journal Remounting filesystem read-only journal commit I/O error /etc/rcS.d/S46mountnfs-bootclean.sh: /etc/rcS.d/S46mountnfs-bootclean.sh: Input/output error end_request: I/O error, dev hdb, sector 1314360 Buffer I/O error on device hdb2, logical block 335880 lost page write due to I/O error on hdb2 end_request: I/O error, dev hdb, sector 822832 Buffer I/O error on device hdb2, logical block 90116 lost page write due to I/O error on hdb2 end_request: I/O error, dev hdb, sector 839256 Buffer I/O error on device hdb2, logical block 98328 lost page write due to I/O error on hdb2 end_request: I/O error, dev hdb, sector 839306 Buffer I/O error on device hdb2, logical block 98353 lost page write due to I/O error on hdb2 end_request: I/O error, dev hdb, sector 1314398 Buffer I/O error on device hdb2, logical block 335899 lost page write due to I/O error on hdb2 ext3_abort called. EXT3-fs error (device hdb2): ext3_remount: Abort forced by user ext3_abort called. EXT3-fs error (device hdb2): ext3_remount: Abort forced by user end_request: I/O error, dev hdb, sector 1200314 end_request: I/O error, dev hdb, sector 1200314 do_generic_mapping_read page not uptodate twice, error=--EIO!!! end_request: I/O error, dev hdb, sector 871414 end_request: I/O error, dev hdb, sector 871414 do_generic_mapping_read page not uptodate twice, error=--EIO!!! /etc/rcS.d/S55bootmisc.sh: /etc/rcS.d/S55bootmisc.sh: Input/output error end_request: I/O error, dev hdb, sector 871398 end_request: I/O error, dev hdb, sector 871398 do_generic_mapping_read page not uptodate twice, error=--EIO!!! end_request: I/O error, dev hdb, sector 871398 do_generic_mapping_read page not uptodate twice, error=--EIO!!! /etc/init.d/rc: line 78: /etc/rcS.d/S55urandom: Input/output error end_request: I/O error, dev hdb, sector 5972010 EXT3-fs error (device hdb5): ext3_find_entry: reading directory #69268 offset 0 end_request: I/O error, dev hdb, sector 5670948 Buffer I/O error on device hdb5, logical block 1 lost page write due to I/O error on hdb5 ext3_abort called.
結果としては、システムの動作が非常に不安定な状態のため、シリアルコンソールからのアクセスも困難な状態でした。ここは諦めて別の方法を検討することにしました。
デスクトップPCを使って、ファイルを取り出す
knoppix DVDを使って必要なファイルを取り出すために、HDL-GS500からHDDを取り出して、デスクトップPCのSATAに接続しました。このときHDDの間違いを避けるために、デスクトップPCに搭載しているHDDの接続は取り外しておきました
knoppixを起動したら端末を立ち上げて、あらかじめsu -でrootになっておきます。またファイルの保存先としてUSBメモリを接続しておきます。
最初の状態としては
/dev/sda にHDL-GS500のHDD /dev/sdb にUSBメモリが接続されている状態です。
USBメモリのマウントポイントを作成して、マウントします。
# mkdir /media/usb # mount /dev/sdb1 /media/usb
HDDをマウントします。マウントポイントは既にあったものを使いました。
# mount /dev/sda1 /media/sda1 # mount /dev/sda2 /media/sda2 # mount /dev/sda5 /media/sda5
HDDのパーティションの状態を調べます。
~# fdisk -l /dev/sda Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xee4739c6 Device Boot Start End Blocks Id System /dev/sda1 16065 642599 313267+ 83 Linux /dev/sda2 642600 1461914 409657+ 83 Linux /dev/sda3 1461915 5670944 2104515 82 Linux swap / Solaris /dev/sda4 5670945 976559219 485444137+ 5 Extended /dev/sda5 5670946 6088634 208844+ 83 Linux /dev/sda6 6088636 976559219 485235292 83 Linuxパーティション情報はうまく読み出すことができました。
続いて、マスターブートレコード(MBR)と、拡張パーティションブートレコード(Extended Partition Boot Record)をUSBメモリに保存しておきます。ddコマンドを使います。
# dd if=/dev/sda of=/media/usb/mbr1.bin bs=512 count=1 # dd if=/dev/sda of=/media/usb/mbr2.bin bs=512 count=1 skip=5670945 # dd if=/dev/sda of=/media/usb/mbr3.bin bs=512 count=1 skip=6088635
- mbr1.bin には sda1,sda2,sda3,sda4
- mbr2.bin には sda5
- mbr3.bin には sda6
引き続き、各パーティションの内容を保存します。ここでうまくいけば、新しいHDDをパーティショニング後にファイルシステムを作成して、このファイルを展開すれば、システムを復元することができそうです。
# cd /media/sda1 # tar cvf /media/usb/hdd1.tar ./ # cd /media/sda2 # tar cvf /media/usb/hdd2.tar ./ # cd /media/sda5 # tar cvf /media/usb/hdd5.tar ./結果は、sda1の保存には成功しましたが、sda2、sda5は途中でエラーが出てしまい、読み出すことができませんでした。
だんだん選択肢が消えていきます。この後は、保存に成功したsda1の初期化用のファイルを使ってシステムの修復を進めることにしました。
USBメモリに保存できたhdd1.tarを展開してみたところ、.landiskディレクトリの中に、再セットアップに必要な初期化用のファイル、sd1.tgz, sd2.tgz, sd5.tgz, sd6.tgz, tar2diskがありました。更にsd1.tgz, sd2.tgz, sd5.tgz, sd6.tgzの中身も無事に展開できました。
以降の修復作業には、この初期化用ファイルを使って進めることができるようになりました。これで一歩前進となりました。
この後の計画
ここまでの結果から、今後の計画を考えました。
- 新しいHDDを買ってくる。
- 新しいHDDをパーティショニング。
- 新しいHDDにファイルシステムを作成、フォーマット。
- 初期化ファイルを使い、新しいHDDにsda1, sda2, sda5, sda6を再構築。
- 新HDDで組立て。HDL-GS500が起動できることを確認する。
- 新HDDを取出し、旧HDDと共にPCへSATA接続。
- 旧HDDのsda6を、新HDDのsda6にコピーする。
- 新HDDで再組立て。
- HDL-GS500を起動して、保存しているデータのバックアップを取る。
この後は、その2へ続きます。
- その2
- 壊れたHDDを、Advanced FormatのHDDに交換。
- その3
- GNU ddrescueを使って、壊れたHDDからデーターを救出。
- その4
- HDL-GS500を、1.0TBに換装して再初期化する。
ここまでに参考にさせていただいたWebサイトです。とても参考になりました,ありがとうございます。
0 件のコメント :
コメントを投稿