[[diary/Kojima]]

・libata

最近のLinuxでは従来のIDEドライバからlibataというSATA/PATAを統合したドラ
イバへ移行しつつあるので,手元のマシンでlibataベースにしたらどうなるかを
試してみた.

  LinuxのIDEドライバは,Linuxの最初期のころからさまざまなハードウェアに
  個別に対応するようなコードを追加しながらインプリメントされてきて,
  Linuxが他のPC-Unixよりも多くのハードウェアに対応していて初期のユーザ
  の獲得に貢献した,という伝統的なコードだけど,その分複雑でメンテナンス
  が困難になってきたため,新しくlibataという実装が作成されたらしい.
  
  確かにLinuxのIDEドライバは,IDE経由でCDを使うためのATAPIが普及する前
  の,メーカ独自仕様の機能とかにも積極的に対応していたのだけど,その結果として
  コードは複雑になって,収拾が付かなくなってきていたらしい.
  
  cdrecordの作者あたりは,LinuxのIDEドライバは機能が中途半端(ATAPIコマ
  ンドがきちんと通らない)なのに開発者はそれを直す気がないらしい,と文句
  付けていたけど,そのあたりもこの新しいドライバで解決するのかな?

手元のIDE接続のみのマシンの起動時のログの該当部分

 PCI: Setting latency timer of device 0000:00:1f.1 to 64
 ata1: PATA max UDMA/100 cmd 0x1F0 ctl 0x3F6 bmdma 0x24A0 irq 14
 ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0x24A8 irq 15
 scsi0 : ata_piix
 ata1.00: ATA-6, max UDMA/100, 361882080 sectors: LBA48 
 ata1.00: ata1: dev 0 multi count 16
 ata1.01: ATA-7, max UDMA/100, 312581808 sectors: LBA48 
 ata1.01: ata1: dev 1 multi count 16
 ata1.00: configured for UDMA/100
 ata1.01: configured for UDMA/100
 scsi1 : ata_piix
 ata2.00: ATAPI, max UDMA/33
 ata2.00: configured for UDMA/33
 scsi 0:0:0:0: Direct-Access     ATA      IC35L180AVV207-1 V26O PQ: 0 ANSI: 5
 SCSI device sda: 361882080 512-byte hdwr sectors (185284 MB)
 sda: Write Protect is off
 sda: Mode Sense: 00 3a 00 00
 SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 SCSI device sda: 361882080 512-byte hdwr sectors (185284 MB)
 sda: Write Protect is off
 sda: Mode Sense: 00 3a 00 00
 SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
  sda: sda1 sda2 sda3
 sd 0:0:0:0: Attached scsi disk sda
 scsi 0:0:1:0: Direct-Access     ATA      SAMSUNG SP1604N  TM10 PQ: 0 ANSI: 5
 SCSI device sdb: 312581808 512-byte hdwr sectors (160042 MB)
 sdb: Write Protect is off
 ...

これを見ると,従来は/dev/hdaとかで見えていたATA接続のHDDが ata_piix 経由でSCSIデバイスとして
/dev/sda とかに見えるようになったことが分かりますね.ATAはprimaryがata1になって、ata1.00が従来の/dev/hda,ata1.01が/dev/hdb
に、secondaryがata2になって、CDドライブと認識されている模様.ここには出てきてないけど,CDドライブは/dev/sr0に見えるみたい.

これくらいだと/dev/hd[abcde]が/dev/sd[abcde]に変るだけなのでそう悩むこ
とはなさげだけど,ATAとSATAが混在する環境だと結構メンドくさい感じ.on boardでSATA接続ができる
ASUS 8V(VIA VT8237)だと,こんな感じのログが出力されていた.

 megaraid: 2.20.4.9 (Release Date: Sun Jul 16 12:27:22 EST 2006)
 sata_via 0000:00:0f.0: version 2.0
 ACPI: PCI Interrupt 0000:00:0f.0[B] -> GSI 20 (level, low) -> IRQ 16
 sata_via 0000:00:0f.0: routed to hard irq line 10
 ata1: SATA max UDMA/133 cmd 0xD000 ctl 0xC802 bmdma 0xB800 irq 16
 ata2: SATA max UDMA/133 cmd 0xC400 ctl 0xC002 bmdma 0xB808 irq 16
 scsi0 : sata_via
 ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
 ATA: abnormal status 0x7F on port 0xD007
 ATA: abnormal status 0x7F on port 0xD007
 ata1.00: ATA-7, max UDMA/133, 625142448 sectors: LBA48 NCQ (depth 0/32)
 ata1.00: ata1: dev 0 multi count 16
 ata1.00: configured for UDMA/133
 scsi1 : sata_via
 ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
 ATA: abnormal status 0x7F on port 0xC407
 ATA: abnormal status 0x7F on port 0xC407
 ata2.00: ATA-7, max UDMA/133, 625142448 sectors: LBA48 NCQ (depth 0/32)
 ata2.00: ata2: dev 0 multi count 16
 ata2.00: configured for UDMA/133
 scsi 0:0:0:0: Direct-Access     ATA      ST3320620AS      3.AA PQ: 0 ANSI: 5
 SCSI device sda: 625142448 512-byte hdwr sectors (320073 MB)
 sda: Write Protect is off
 sda: Mode Sense: 00 3a 00 00
 SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 SCSI device sda: 625142448 512-byte hdwr sectors (320073 MB)
 sda: Write Protect is off
 sda: Mode Sense: 00 3a 00 00
 SCSI device sda: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
  sda: sda1
 sd 0:0:0:0: Attached scsi disk sda
 scsi 1:0:0:0: Direct-Access     ATA      Hitachi HDT72503 V54O PQ: 0 ANSI: 5
 SCSI device sdb: 625142448 512-byte hdwr sectors (320073 MB)
 sdb: Write Protect is off
 sdb: Mode Sense: 00 3a 00 00
 SCSI device sdb: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 SCSI device sdb: 625142448 512-byte hdwr sectors (320073 MB)
 sdb: Write Protect is off
 sdb: Mode Sense: 00 3a 00 00
 SCSI device sdb: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
  sdb: sdb1
 sd 1:0:0:0: Attached scsi disk sdb
 pata_via 0000:00:0f.1: version 0.2.1
 ACPI: PCI Interrupt 0000:00:0f.1[A] -> GSI 20 (level, low) -> IRQ 16
 ata3: PATA max UDMA/133 cmd 0x1F0 ctl 0x3F6 bmdma 0xFC00 irq 14
 ata4: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xFC08 irq 15
 scsi2 : pata_via
 ata3.00: ATA-5, max UDMA/100, 156301488 sectors: LBA 
 ata3.00: ata3: dev 0 multi count 16
 ata3.00: configured for UDMA/100
 scsi3 : pata_via
 ata4.00: ATAPI, max UDMA/33
 ata4.00: configured for UDMA/33
 scsi 2:0:0:0: Direct-Access     ATA      ST380021A        3.75 PQ: 0 ANSI: 5
 SCSI device sdc: 156301488 512-byte hdwr sectors (80026 MB)
 sdc: Write Protect is off
 sdc: Mode Sense: 00 3a 00 00
 SCSI device sdc: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 SCSI device sdc: 156301488 512-byte hdwr sectors (80026 MB)
 sdc: Write Protect is off
 sdc: Mode Sense: 00 3a 00 00
 SCSI device sdc: write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sdc: sdc1 sdc2 sdc3 sdc4
 sd 2:0:0:0: Attached scsi disk sdc
 scsi 3:0:0:0: CD-ROM            PIONEER  DVD/CDRW DCR-111 1.26 PQ: 0 ANSI: 5
 sr0: scsi3-mmc drive: 40x/94x writer cd/rw xa/form2 cdda tray
 Uniform CD-ROM driver Revision: 3.20

これだとSATA接続のデバイスが先に認識されてata1,ata2になって、/dev/sda,/dev/sdbが割りあてられ、
PATA接続はata3以降で/dev/sdcに,/dev/hdcのCDドライブが/dev/sr0になっている感じ.

ちなみに既存の環境への上書きインストールとかもやってみたけど,grubが認識するHDDの順番は
従来通りATAPI->SATAなので,/dev/hda1は/boot/grub.confのドライブ指定だと(hd0,0)になるけど,
カーネルパラメータとしてroot partitionを渡す際は/dev/sdc1とかにしないといけないので,
かなり紛らわしい気がする.

イジった感じ,libataは最近のサウスブリッジチップには対応できてそうなので,後は古めのマザーボードとか
拡張IDEカードの類いの対応状況次第だろうなぁ..

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS