codr.cc - share code, live.

http://codr.cc/
コードをブラウザからリアルタイムで複数人で共有して編集できる。
http://www.ideaxidea.com/archives/2011/04/cord_cc.html
http://d.hatena.ne.jp/atomer/20110430/1304174788
このころからは、だいぶ変化している。
http://www.lifehacker.jp/2011/01/110116codrcc.html
インターフェイスレスの設計はいいな。

サムスン、「GALAXY S2」などの試作品をアップルに提出へ--裁判所命令で

http://japan.cnet.com/apple/35003148/

問題となっているスマートフォンタブレットは、サムスンの「GALAXY S2」「GALAXY Tab 8.9」「GALAXY Tab 10.1」「Infuse 4G」「Droid Charge」だ。サムスンにとっては幸いなことに、提出された製品の調査は、この訴訟を担当するApple側の弁護団だけで行う予定で、Apple社員はおろかAppleの社内弁護士さえサムスン製のデバイスを見る予定はない。

プログラマの地位向上のためにやれること

http://watanabek.cocolog-nifty.com/blog/2011/05/post-6047.html

プログラマの地位を確実に高めるための手段がひとつある。結果的にプログラマの参入障壁が高まるような変化を起こせばよい。

2つプランが出ているけど、どっちもうまくいかないような気が。

NHK放送技術研究所 フレキシブル制作システム ソースプログラム公開

http://www.nhk.or.jp/strl/flexible/

公開するシステム
      「フレキシブル制作システム(ウェブ編集システム)」
      「分散ファイルシステム
      「挿入削除機能付きファイルシステム
      「高速ファイル転送システム」
      「素材作成用MXFライブラリ」

残念ながら、利用許諾がソース公開して意味がある内容じゃない。一部はGPL2もあるのにな。
分散ファイルシステムは面白そうなのに。
http://www.nhk.or.jp/strl/flexible/doc_bigpool.html

15分で人体フィギュアを作る3Dスキャナー/プリンター

http://jp.techcrunch.com/archives/20110524video-check-out-blablablabs-3d-body-scannerprinter-at-tc-disrupt/
Kinect3Dプリンタの合わせ技。
これはいいねぇ!
イベントとかで流行りそう。
ペットとか二人でとか。
着色も自動化できたらいいのに。
15分ってのを満たすためか、プリンタの性能か、出来たフィギュアは小さいし、単色だし、再現性はよくなさそう。
全身よりトルソとかのほうがいいのじゃないだろうか。

ミラー運用で片方のディスクの先頭を書き潰してしまった場合の修復手順(ダメダメ編)

作業マシンが、RAID1だったということをすっかり忘れてて、sdbの頭からddしてしまつた。
こんなミスはしたことない(^^;。

root@redmine:~# dd if=/dev/zero of=/dev/sdb
^C61019+0 records in
61019+0 records out
31241728 bytes (31 MB) copied, 1.72095 s, 18.2 MB/s

あわてて、止めたけど、すでに31MBも書き潰してしまつた。
当然ながら、パーティションテーブルもない。

root@redmine:~# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table

状況の確認

リカバリしないとなぁ...
SqueezeのインストーラーでパーティションRAIDも構成したので、どんな構成だったかも覚えてない(^^;。
まず生きているほうのパーティションテーブルを確認。

root@redmine:~# fdisk -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000f5f2

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       60055   482384896   fd  Linux raid autodetect
/dev/sda2           60055       60802     5998593    5  Extended
/dev/sda5           60055       60802     5998592   fd  Linux raid autodetect

sda1はrootfs。
sda5はswapかな。
どちらもmdでRAID1構成になっている。
mdのオペレーションなんて、もう何年もやってないので、すっかり忘却しているなぁ...

root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active (auto-read-only) raid1 sda5[0] sdb5[1]
      5998528 blocks [2/2] [UU]
      
md0 : active raid1 sda1[0] sdb1[1]
      482384832 blocks [2/2] [UU]
      
unused devices: <none>

md構成は壊れていないと認識している。
生きているドライブを上書きしただけだし、sda優先になっているので電源を切らない限り動作に問題はないだろう。

修理の戦略

さて、修理の戦略を立てる。
まずは、動いたままなので、パーティションテーブルを復旧する。
swap領域は一部上書きしたので、たぶんダメ。こちらは開放してデグレードさせる。ddで書き潰しておく。mdのリビルドをやる。
rootfsは、まだ生きているので、これはパーティションテーブルを復旧すると治るのじゃないかと甘い期待をしてみる。
なんせ500GBなのでリビルドかけるだけで気が遠くなる時間がかかるから...

パーティションテーブルの復旧

これはマニュアルで。
幸いなことに、同じメーカーの同じドライブなので、sdaのMBRをコピって上書きする。

root@redmine:~# dd if=/dev/hda of=mbr.img bs=512 count=1
dd: opening `/dev/hda': No such file or directory
root@redmine:~# dd if=/dev/sda of=mbr.img bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 7.4122e-05 s, 6.9 MB/s
root@redmine:~# dd if=mbr.img of=/dev/sdb bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 7.3887e-05 s, 6.9 MB/s
root@redmine:~# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000f5f2

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       60055   482384896   fd  Linux raid autodetect
/dev/sdb2           60055       60802     5998593    5  Extended
/dev/sdb5           60055       60802     5998592   fd  Linux raid autodetect

というわけで復活。

Disk identifierが同じだけど?

でも、Disk identifierが同じになっているな。これって使っているのだったっけ?
http://www.linuxquestions.org/questions/linux-general-1/what-is-disk-identifier-740408/

A Disk Identifier (or Disk Signature) applies to an entire hard disk drive (not a single partition). A Disk Identifier/Disk Signature is a 4-byte (longword) number that is randomly generated when the Master Boot Record/Partition Table is first created and stored. The Disk Identifier is stored at byte offset 1B8 (hex) through 1BB (hex) in the MBR disk sector. Windows Vista uses the Disk Signature to locate boot devices so changing it can prevent Vista from booting. So far as I know Grub and Linux don't use the Disk Identifier.

Linuxでは、使ってないみたいね。
このスレッドには、Disk identifierを書き換えるCのサンプルもある。
でも、fdiskを使ったほうが簡単。
念のため変更しておく。

root@redmine:~# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): x

Expert command (m for help): m
Command action
   b   move beginning of data in a partition
   c   change number of cylinders
   d   print the raw data in the partition table
   e   list extended partitions
   f   fix partition order
   g   create an IRIX (SGI) partition table
   h   change number of heads
   i   change the disk identifier
   m   print this menu
   p   print the partition table
   q   quit without saving changes
   r   return to main menu
   s   change number of sectors/track
   v   verify the partition table
   w   write table to disk and exit

Expert command (m for help): i
New disk identifier (current 0x0000f5f2): 0x0000f5f3
Disk identifier: 0x0000f5f3

Expert command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

UUIDの確認

UUIDはパーティションごとに持っている。
昨今は、ドライブの認識にこいつを使っているから、話がめんどくさい。
こいつも上書きされたから、同じになっている。
ミラー構成にしてあるので、UUIDは同じでいいはず。
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch26_:_Linux_Software_RAID

All three partitions were given the UUID label 77b695c4:32e5dd46:63dd7d16:17696e09 when the mdadm command created device /dev/md0. The mdadm.conf file makes sure this mapping is remembered when you reboot.

同じになっていることを確認。

root@redmine:~# blkid /dev/sda*
/dev/sda1: UUID="4203a1e6-c935-ba5a-0090-cc13c02a0c21" TYPE="linux_raid_member" 
/dev/sda5: UUID="7d4576d3-ca18-c730-5edd-8ffeb6891536" TYPE="linux_raid_member" 
root@redmine:~# blkid /dev/sdb*
/dev/sdb1: UUID="4203a1e6-c935-ba5a-0090-cc13c02a0c21" TYPE="linux_raid_member" 
/dev/sdb5: UUID="7d4576d3-ca18-c730-5edd-8ffeb6891536" TYPE="linux_raid_member" ||<
RAID設定のUUIDとの一致も確認しておく。
>||
root@redmine:~# cat /etc/mdadm/mdadm.conf | grep UUID
ARRAY /dev/md0 UUID=4203a1e6:c935ba5a:0090cc13:c02a0c21
ARRAY /dev/md1 UUID=7d4576d3:ca18c730:5edd8ffe:b6891536

問題ない。
同じドライブを使っていない場合は、fdisk -l の結果をバックアップしておいたほうがいい。
ホントは、パーティションテーブルをバックアップしておくといいんだけど(^^;。
同じでない場合は、sdaのfdiskの結果から、"Endの数字/headsの数字/sectorsの数字"した値を境界にして、fdiskで新規にパーティションを作る。
UUIDはext系のfsを使ってれば以下のように設定できる。

# tune2fs -U [UUID] /dev/[tagetDevice]

swapの再構成と痛恨のミス...

swapのsdb1をRAID構成から外しておく。

root@redmine:~# mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0

あちゃ、痛恨のミス。
swapなのはmd1-sdb5じゃんか... orz
でかいほうのボリュームを外しちゃったよ... orz

root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active (auto-read-only) raid1 sda5[0] sdb5[1]
      5998528 blocks [2/2] [UU]
      
md0 : active raid1 sda1[0] sdb1[2](F)
      482384832 blocks [2/1] [U_]
      
unused devices: <none>

今日はダメダメな日だわ...

戦略変更。全部リビルドすることに... orz

しょうがないので、全部リビルドさせる。
ふつーすぎて、つまらんな...

root@redmine:~# mdadm --manage /dev/md1 --fail /dev/sdb5
mdadm: set /dev/sdb5 faulty in /dev/md1
root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sda5[0] sdb5[2](F)
      5998528 blocks [2/1] [U_]
      
md0 : active raid1 sda1[0] sdb1[2](F)
      482384832 blocks [2/1] [U_]
      
unused devices: <none>

リビルド。

root@redmine:~# mdadm /dev/md0 -a /dev/sdb1
mdadm: Cannot open /dev/sdb1: Device or resource busy

なぬ?
こうだっけ?

root@redmine:~# mdadm --manage /dev/md0 -a /dev/sdb1
mdadm: Cannot open /dev/sdb1: Device or resource busy

ぬう?

root@redmine:~# mdadm --add /dev/md0 /dev/sdb1
mdadm: Cannot open /dev/sdb1: Device or resource busy

あー、うろおぼえでは、壊してしまうな...
ほんとダメな日。

なんでリビルド開始しないの???

RAIDの状態チェック。

root@redmine:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Fri May 13 12:56:38 2011
     Raid Level : raid1
     Array Size : 482384832 (460.04 GiB 493.96 GB)
  Used Dev Size : 482384832 (460.04 GiB 493.96 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Thu May 26 15:01:24 2011
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0

           UUID : 4203a1e6:c935ba5a:0090cc13:c02a0c21
         Events : 0.76

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       0        0        1      removed

       2       8       17        -      faulty spare   /dev/sdb1

想定通りだな。
sdb1が再ジョインできないのはなんでだ?


あ、spareになってるや。
removeしてないからか。
それば、busyだわな。

root@redmine:~# mdadm /dev/md0 -r /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0
root@redmine:~# mdadm /dev/md1 -r /dev/sdb5
mdadm: hot removed /dev/sdb5 from /dev/md1
root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sda5[0]
      5998528 blocks [2/1] [U_]
      
md0 : active raid1 sda1[0]
      482384832 blocks [2/1] [U_]
      
unused devices: <none>

再構築。

root@redmine:~# mdadm /dev/md1 -a /dev/sdb5
mdadm: re-added /dev/sdb5
root@redmine:~# mdadm /dev/md0 -a /dev/sdb1
mdadm: re-added /dev/sdb1
root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sdb5[2] sda5[0]
      5998528 blocks [2/1] [U_]
      [====>................]  recovery = 24.9% (1495616/5998528) finish=2.0min speed=36634K/sec
      
md0 : active raid1 sdb1[2] sda1[0]
      482384832 blocks [2/1] [U_]
      	resync=DELAYED
      
unused devices: <none>

あとはエラーが出ないことを祈りながら、待つだけ...
500GBのこの環境で、予想時間表示では100分くらい。

起動できるの?

まだ、GRUB関係の起動部分はどうなってしまったかという問題はあるな。
md1の時のGRUB2ってどうやって設定するのだったかな?
/boot/grub/grub.cfgを見ると、どうもちゃんとmdを認識するようだ。
GRUB2恐るべし。
MBRごと上書きしたし、これは問題なさそうかな。
とりあえず書いておく。

root@redmine:~# grub-install /dev/sda
Installation finished. No error reported.
root@redmine:~# grub-install /dev/sdb
Installation finished. No error reported.


というわけで、無事リビルド終わり。

root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sdb5[1] sda5[0]
      5998528 blocks [2/2] [UU]
      
md0 : active raid1 sdb1[1] sda1[0]
      482384832 blocks [2/2] [UU]
      
unused devices: <none>

再起動後も無事に動いています。

さて、普通のマシンでHotswapするにはどうしたらいいんだろう

今回はミスにすぎなかったですが、リアルにデグレードした時にはどうしたらいいんでしょう?
無停止を強要されるのでなければ再起動しろってことなんでしょうけど...
手順としては、デバイス落として、抜いて挿して、SCSIをrescanさせればよかったのだったっけ?
というわけで、リビルドがせっかく終わったのだけど、演習する。


前に調べたのは2006年で、そのときはマトモな方法がなかったのね。
http://d.hatena.ne.jp/kinneko/20060407/p13
ttp://linux-ata.org/って、ロシア語のサイトに行っちゃうなぁ...
いまはこのあたり?
https://ata.wiki.kernel.org/index.php/Libata_Feature_Table
さすがにhotplugはサポートされている。
https://ata.wiki.kernel.org/index.php/Software_status#Hotplug_support
使っているマシンは、ICH9ですね。
https://ata.wiki.kernel.org/index.php/Hardware,_driver_status#AHCI_.28newer_Intel_ICH.2C_ULi.2C_others.29
対応済み。


具体的な手順はこのへんに書かれている。
https://raid.wiki.kernel.org/index.php/Hotplug
まずは、mdadmのバージョンが3.1.2以降でないとhotplugに対応していないのだそう。

root@redmine:~# mdadm --version
mdadm - v3.1.4 - 31st August 2010

これは大丈夫。


接続されているSATAバイスとドライブ名の対応を調べる。
まずは、ドライブの確認。

root@redmine:~# cat /sys/bus/scsi/devices/2\:0\:0\:0/model 
SAMSUNG HA500LJ 
root@redmine:~# cat /sys/bus/scsi/devices/3\:0\:0\:0/model 
SAMSUNG HA500LJ 

このマシンは妙で、0,1が外に向いていると言ってたな。
確かに0,1がなく、2からはじまっている。


順番的には、2がsdaで、3がsdbかな?

root@redmine:~# dmesg | grep 'Attached SCSI disk'
[    4.150583] sd 2:0:0:0: [sda] Attached SCSI disk
[    4.165018] sd 3:0:0:0: [sdb] Attached SCSI disk

間違いない。
dmesgがいつでもアテになるとは限らないので、この対応を調べる方法はないかな。
これがいいかな。

root@redmine:~# ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/*
/sys/bus/scsi/devices/2:0:0:0/block/sda
/sys/bus/scsi/devices/3:0:0:0/block/sdb

なんかで再利用する時には、こんな感じか。

root@redmine:~# ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}'
sda	2:0:0:0
sdb	3:0:0:0


RAIDを崩壊させる。
あんまりいい方法はない。
擬似的にやる。
https://raid.wiki.kernel.org/index.php/Detecting,_querying_and_testing

root@redmine:~# mdadm --manage --set-faulty /dev/md0 /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active (auto-read-only) raid1 sda5[0] sdb5[1]
      5998528 blocks [2/2] [UU]
      
md0 : active raid1 sda1[2](F) sdb1[1]
      482384832 blocks [2/1] [_U]
      
unused devices: <none>

root@redmine:~# mdadm --manage --remove /dev/md0 /dev/sda1
mdadm: hot removed /dev/sda1 from /dev/md0
root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active (auto-read-only) raid1 sda5[0] sdb5[1]
      5998528 blocks [2/2] [UU]
      
md0 : active raid1 sdb1[1]
      482384832 blocks [2/1] [_U]
      
unused devices: <none>

同じドライブ上にあるので、sda1も同様にする。

root@redmine:~# mdadm --manage --remove /dev/md1 /dev/sda5
mdadm: hot remove failed for /dev/sda5: Device or resource busy
root@redmine:~# mdadm --manage --set-faulty /dev/md1 /dev/sda5
mdadm: set /dev/sda5 faulty in /dev/md1
root@redmine:~# mdadm --manage --remove /dev/md1 /dev/sda5
mdadm: hot removed /dev/sda5 from /dev/md1
root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sdb5[1]
      5998528 blocks [2/1] [_U]
      
md0 : active raid1 sdb1[1]
      482384832 blocks [2/1] [_U]
      
unused devices: <none>

logには、こんな感じで出ている。

[  802.508972] md: unbind<sda1>
[  802.537044] md: export_rdev(sda1)
[  897.737030] md: unbind<sda5>
[  897.765041] md: export_rdev(sda5)


ドライブを抜けるようにする。
sdaは、2:0:0:0だった。

root@redmine:~# echo 1 > /sys/class/scsi_device/2\:0\:0\:0/device/delete 

logにはこのような表示が。

[ 1121.136338] sd 2:0:0:0: [sda] Synchronizing SCSI cache
[ 1121.136840] sd 2:0:0:0: [sda] Stopping disk
[ 1121.568061] ata3.00: disabled
root@redmine:~# ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}'
sdb	3:0:0:0

1つしか見えなくなっている。
ドライブを抜く。

[ 1263.849204] ata4: exception Emask 0x50 SAct 0x0 SErr 0x4090800 action 0xe frozen
[ 1263.849320] ata4: irq_stat 0x00400040, connection status changed
[ 1263.849403] ata4: SError: { HostInt PHYRdyChg 10B8B DevExch }
[ 1263.849490] ata4: hard resetting link
[ 1264.572024] ata4: SATA link down (SStatus 0 SControl 300)
[ 1269.572025] ata4: hard resetting link
[ 1269.892025] ata4: SATA link down (SStatus 0 SControl 300)
[ 1269.892037] ata4: limiting SATA link speed to 1.5 Gbps

あれ?

root@redmine:~# ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}'
ls: cannot access /sys/bus/scsi/devices/?:0:0:0/block/*: No such file or directory

バスが死んじゃった...
あはは...
ファイルにアクセスできないな...
完全に死んだ。
抜く方間違えたかな?
むぅ。


強制電源断して、ドライブを入れて、再起動。
普通に上がってきた(^^;。
RAIDはさっきと変わらない。

root@redmine:~#  ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}'
sda	2:0:0:0
sdb	3:0:0:0

もう一度。

root@redmine:~# echo 1 > /sys/class/scsi_device/2\:0\:0\:0/device/delete 
root@redmine:~#  ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}'
sdb	3:0:0:0
[  130.201419] sd 2:0:0:0: [sda] Synchronizing SCSI cache
[  130.201922] sd 2:0:0:0: [sda] Stopping disk
[  130.629828] ata3.00: disabled

今度は右のドライブを抜く。

[  199.854500] ata3: exception Emask 0x10 SAct 0x0 SErr 0x4010000 action 0xe frozen
[  199.854616] ata3: irq_stat 0x00400040, connection status changed
[  199.854699] ata3: SError: { PHYRdyChg DevExch }
[  199.854782] ata3: hard resetting link
[  200.576023] ata3: SATA link down (SStatus 0 SControl 300)
[  200.576037] ata3: EH complete

メッセージは同じだがsdbは生きている。

root@redmine:~#  ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}'
sdb	3:0:0:0

キャッシュに入りきれないような、ディスクにアクセスする作業をしても、特に問題は出ない。
抜くのはできた。


ドライブを挿入する。

[  662.061936] ata3: exception Emask 0x10 SAct 0x0 SErr 0x4050002 action 0xe frozen
[  662.062052] ata3: irq_stat 0x00400040, connection status changed
[  662.062135] ata3: SError: { RecovComm PHYRdyChg CommWake DevExch }
[  662.062227] ata3: hard resetting link
[  672.076018] ata3: softreset failed (device not ready)
[  672.076105] ata3: hard resetting link
[  673.300023] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[  673.320676] ata3.00: ATA-8: SAMSUNG HA500LJ, CW300-11, max UDMA7
[  673.320683] ata3.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA
[  673.322814] ata3.00: configured for UDMA/133
[  673.322829] ata3: EH complete
[  673.323026] scsi 2:0:0:0: Direct-Access     ATA      SAMSUNG HA500LJ  CW30 PQ: 0 ANSI: 5
[  673.323734] sd 2:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[  673.323893] sd 2:0:0:0: [sda] Write Protect is off
[  673.323901] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[  673.323968] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[  673.324387]  sda: sda1 sda2 < sda5 >
[  673.363166] sd 2:0:0:0: [sda] Attached SCSI disk
root@redmine:~#  ls -d /sys/bus/scsi/devices/?\:0\:0\:0/block/* | awk 'BEGIN { FS="/"} {print $8 "\t" $6}'
sda	2:0:0:0
sdb	3:0:0:0

またsdaとして認識している。
このへん、どこでドライブ名がフラつかないようにしているんだろう。
問題なくアクセスできる。

root@redmine:~# fdisk -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000f5f2

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       60055   482384896   fd  Linux raid autodetect
/dev/sda2           60055       60802     5998593    5  Extended
/dev/sda5           60055       60802     5998592   fd  Linux raid autodetect

バスでデバイスを再スキャンさせる手順は不要のようだ。

root@redmine:~# cat /sys/bus/scsi/devices/2\:0\:0\:0/state          
running

/sys/bus/scsi/devices/2\:0\:0\:0/rescan なんかは、特にさわらなくていいのかな。


リビルドする。
パーティション構成などは、そのままなので、リビルドだけ。
小さいほうから。

root@redmine:~# mdadm --manage --add /dev/md1 /dev/sda5
mdadm: re-added /dev/sda5

root@redmine:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sda5[2] sdb5[1]
      5998528 blocks [2/1] [_U]
      [=>...................]  recovery =  8.1% (490496/5998528) finish=2.2min speed=40874K/sec
      
md0 : active raid1 sdb1[1]
      482384832 blocks [2/1] [_U]
      
unused devices: <none>


ちょっと遅いので、リビルドのスピードアップをする。

root@redmine:~# cat /proc/sys/dev/raid/speed_limit_max
200000
root@redmine:~# cat /proc/sys/dev/raid/speed_limit_min
1000

45768K/secしか出てないから、maxのほうは足りているのじゃないかな。
下限のほうを上げるか。

root@redmine:~# echo "200000" > /proc/sys/dev/raid/speed_limit_min
md1 : active raid1 sda5[2] sdb5[1]
      5998528 blocks [2/1] [_U]
      [==============>......]  recovery = 74.5% (4470400/5998528) finish=0.6min speed=40546K/sec

あまり変化はない... orz
ビルド終わり。
次は大きいほう。

root@redmine:~# mdadm --manage --add /dev/md0 /dev/sda1
mdadm: re-added /dev/sda1

speed=84246K/secか。
終了予想が、100分くらいというのは変わらない。


mdadmに、growなんてオプションもできたのね...
昔はなかったズラ。
あとでfsも伸ばさないといけないのはめんどくさいけど。