2012年10月25日木曜日

HDL-GS500が故障。

既にひと月も前の事になりますが、ファイル保存に使用しているネットワーク・ハードディスク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. Johnson 
ipddp0: 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の中身も無事に展開できました。

以降の修復作業には、この初期化用ファイルを使って進めることができるようになりました。これで一歩前進となりました。


この後の計画

ここまでの結果から、今後の計画を考えました。

  1. 新しいHDDを買ってくる。
  2. 新しいHDDをパーティショニング。
  3. 新しいHDDにファイルシステムを作成、フォーマット。
  4. 初期化ファイルを使い、新しいHDDにsda1, sda2, sda5, sda6を再構築。
  5. 新HDDで組立て。HDL-GS500が起動できることを確認する。
  6. 新HDDを取出し、旧HDDと共にPCへSATA接続。
  7. 旧HDDのsda6を、新HDDのsda6にコピーする。
  8. 新HDDで再組立て。
  9. HDL-GS500を起動して、保存しているデータのバックアップを取る。
これでうまくいけばいいのですが…

この後は、その2へ続きます。

その2
壊れたHDDを、Advanced FormatのHDDに交換。
その3
GNU ddrescueを使って、壊れたHDDからデーターを救出。
その4
HDL-GS500を、1.0TBに換装して再初期化する。



ここまでに参考にさせていただいたWebサイトです。とても参考になりました,ありがとうございます。

洗脳電波発信装置 換装なの☆です
digital西行庵 wiki HDL-GS petit hack

0 件のコメント :