hot swap для SATA на базе ICH9R в linux debian (2.6.25)

На доскональное знание данной темы, не может претендовать, пожалуй ни один спец, из ныне живущих на земле. ;-)
Так поможем друг другу.

Модераторы: Trinity admin`s, Free-lance moderator`s

Ответить
Владимир Дашевский
member
Сообщения: 21
Зарегистрирован: 24 янв 2008, 17:12
Откуда: Санкт-Петербург
Контактная информация:

hot swap для SATA на базе ICH9R в linux debian (2.6.25)

Сообщение Владимир Дашевский » 18 мар 2009, 17:09

Примерно год назад прикупил в Тринити сервер от SuperMicro на базе 5015B-MT. С тремя дисками SATA по 500 Гб каждый. Довольно долго он бегал под дебианом фактически на одном диске, по причине невнятного статуса поддержки RAID в линуксе (дебиан не поддержан в SuperMicro). Теперь вот хочу оживить таки RAID 1, с поддержкой hot swap. И вот обнаружил такие грабли.

1. Если в процессе работы выдернуть третий диск, а затем вставить его назад, то можно наблюдать, как в системном логе происходит сворачивание и открытие диска, лог примерно такого содержания:
---
ata3: exception Emask 0x50 SAct 0x0 SErr 0x4090800 action 0xe frozen
ata3: irq_stat 0x00400040, connection status changed
ata3: SError: { HostInt PHYRdyChg 10B8B DevExch }
ata3: hard resetting link
ata3: SATA link down (SStatus 0 SControl 300)
ata3: failed to recover some devices, retrying in 5 secs
ata3: hard resetting link
ata3: SATA link down (SStatus 0 SControl 300)
ata3: failed to recover some devices, retrying in 5 secs
ata3: hard resetting link
ata3: SATA link down (SStatus 0 SControl 300)
ata3.00: disabled
ata3: EH complete
ata3.00: detaching (SCSI 2:0:0:0)
sd 2:0:0:0: [sdc] Synchronizing SCSI cache
sd 2:0:0:0: [sdc] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK,SUGGEST_OK
sd 2:0:0:0: [sdc] Stopping disk
sd 2:0:0:0: [sdc] START_STOP FAILED
sd 2:0:0:0: [sdc] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK,SUGGEST_OK
ahci em: 40: post command 00080002
ata3: exception Emask 0x10 SAct 0x0 SErr 0x4050002 action 0xa frozen
ata3: irq_stat 0x00400040, connection status changed
ata3: SError: { RecovComm PHYRdyChg CommWake DevExch }
ata3: hard resetting link
ata3: softreset failed (device not ready)
ata3: hard resetting link
ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata3.00: ATA-7: ST3500320AS, SD04, max UDMA/133
ata3.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32)
ata3.00: configured for UDMA/133
ata3: EH complete
sd 2:0:0:0: [sdc] Attached SCSI disk
sd 2:0:0:0: Attached scsi generic sg2 type 0
---
Жирным я выделил непонятные места. Получается, что система поначалу не врубилась, что диск вынули, а думала, что поломался SATA-линк, и зачем-то пыталась его три раза рестартовать. Потом она его отключила и сообразила, что неплохо бы скинуть кэши (вовремя то как). Потом она решила его остановить сама, и это не получилось. А после возврата диска назад в корзину система вновь обломалась с softreset'ом. То ли не успела, то ли, наоборот, дернула его, пока дис только внутренний тест гонял.
Но, несмотря на всю странность этого лога, диск после проведенной процедуры можно пользовать на чтение и запись, система его видит как прежде.

2. Если выдернутый диск взять и вставить в слот четвертого диска, который у меня оставался пока свободным, то выясняется, что система его вообще не видит и знать не знает. Она вообще не собирается его там распознавать и запускать. Вот такой вот hot swap интересный. По стартовым логам линукса видно:
---
ahci 0000:00:1f.2: version 3.0
ACPI: PCI Interrupt 0000:00:1f.2 -> GSI 17 (level, low) -> IRQ 17
ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0xb impl SATA mode
ahci 0000:00:1f.2: flags: 64bit ncq sntf led clo pmp pio slum part
PCI: Setting latency timer of device 0000:00:1f.2 to 64
scsi0 : ahci
scsi1 : ahci
scsi2 : ahci
scsi3 : ahci
scsi4 : ahci
scsi5 : ahci
ata1: SATA max UDMA/133 abar m2048@0xd8601000 port 0xd8601100 irq 1275
ata2: SATA max UDMA/133 abar m2048@0xd8601000 port 0xd8601180 irq 1275
ata3: DUMMY
ata4: SATA max UDMA/133 abar m2048@0xd8601000 port 0xd8601280 irq 1275
ata5: DUMMY
ata6: DUMMY
---
То есть, он подхватил только три диска из 4, причем дал им названия sda, sdb, sdc, хотя sdc реально подколючен к порту ata4, а не ata3. Кроме того, он поотключал автодетект дисков на портах ata3, ata5, ata6, что, на мой взгляд, неправильно.

Вопрос:
1. Как сделать, чтобы диски всегда нумеровались в соответствии с портами, чтобы при старте системы каждый диск сохранял свое имя, даже если временно вынули соседа?
2. Как сделать, чтобы при система всегда держала готовой к подключению всю корзину, а не только те слоты, где диски стояли на момент запуска драйвера AHCI?
3. Существуют ли средства для культурного отстегивания hot_swap устройства? Это когда систему сначала предупреждают, что устройство готовят к удалению, оно запрещает новые открытия, сливает все кэши, останавливает шпиндель, уводит устройство в сброс, и потом уже сситема не удивляется, что устройство пропало и не ведет себя так, будто линк выдал сбой.

Аватара пользователя
setar
Site Admin
Site Admin
Сообщения: 1990
Зарегистрирован: 22 авг 2002, 12:03
Откуда: St. Petersburg

Re: hot swap для SATA на базе ICH9R в linux debian (2.6.25)

Сообщение setar » 19 мар 2009, 13:56

1. лейблы дисков никто не отменял
а вообще есть два варианта первый это использовать имена дисков через девайс маппер
например /dev/disk/by-id/.... или /dev/disk/by-label или даже /dev/disk/by-uuid
ну или самостоятельно читать и руками писать правило в udev а ля "persistent-net.rules" только persistent-disk.rules
2. А откуда информация что ICH9R является для SATA HotPlug ??? ;)
3. umount && sync

Владимир Дашевский
member
Сообщения: 21
Зарегистрирован: 24 янв 2008, 17:12
Откуда: Санкт-Петербург
Контактная информация:

Re: hot swap для SATA на базе ICH9R в linux debian (2.6.25)

Сообщение Владимир Дашевский » 19 мар 2009, 14:12

1. Метки то осделать действительно несложно. Проблема не только в этом. Главная беда в том, что если система стартует с пустым карманом, то при вставке в него диска она вообще его видеть не желает. Можно с этим как-то бороться, чтобы некоторое имя было просто таки зарезервировано под определенный порт ICH9? Вроде ж именно так раньше и было с PATA, hda всегда был primary master, hdb - primary slave, etc.
2. Ну вот прямо из даташина на SATA Controller в ICH9:
5.16.3 SATA Swap Bay Support
The ICH9 provides for basic SATA swap bay support using the PSC register
configuration bits and power management flows. A device can be powered down by
software and the port can then be disabled, allowing removal and insertion of a new
device.
Note: This SATA swap bay operation requires board hardware (implementation specific),
BIOS, and operating system support.

Причем, если быть более дотошным, мне вовсе не нужно то поведение, которое они называют там hotplug'ом:
Hot Plug Support
Allows for device detection without power being applied and
ability to connect and disconnect devices without prior
notification to the system
То есть, меня вполне устроит поведение, схожее с USB флешкой: подключил, автоматически опозналось. Перед выключением попросил систему отмонтировать и отмигаться, потом выдернул. А уж это-то вообще без проблем с SATA.
3. а как быть если, диск будет это частью RAID1?

Владимир Дашевский
member
Сообщения: 21
Зарегистрирован: 24 янв 2008, 17:12
Откуда: Санкт-Петербург
Контактная информация:

Re: hot swap для SATA на базе ICH9R в linux debian (2.6.25)

Сообщение Владимир Дашевский » 19 мар 2009, 14:24

Кстати, по поводу umount. Насколько я понимаю, umount положено делать для отмонтирования файловой системы, взятой из блочного устройства. Если же какой-то процесс (mdadm) схватил (открыл) само устройство (/dev/sdc), то umount тут не поможет. А перед доставанием диска нужно скорее что-то типа hdparm -fFY /dev/sdc. Во всяком случае, как я проверил, он таки диск останавливает и кэши все сливает перед этим.

Аватара пользователя
setar
Site Admin
Site Admin
Сообщения: 1990
Зарегистрирован: 22 авг 2002, 12:03
Откуда: St. Petersburg

Re: hot swap для SATA на базе ICH9R в linux debian (2.6.25)

Сообщение setar » 19 мар 2009, 22:01

перед извлечением диска входящего в софтовый рейд его нужно вывести из группы :

Код: Выделить всё

root@buki:/> mdadm /dev/md2 --remove /dev/sdj2
mdadm: hot removed /dev/sdj2
взято отсюда http://lists.debian.org/debian-russian/ ... 00102.html

ну а по поводу поведения как флешка - это тоже не совсем то, влешка подключается разными девайсами, один раз может быть sdb а если воткнуть кард ридер перед ней так вообще улетит в sdf , но не суть, нужно копать в сторону написания persistent disk rules для udev
типа так :

Код: Выделить всё

# udevinfo -a -p /sys/block/sda

  looking at device '/block/sda':
    KERNEL=="sda"
    SUBSYSTEM=="block"
    ATTR{stat}=="  128535     2246  2788977   766188    73998   317300  3132216  5735004        0   516516  6503316"
    ATTR{size}=="234441648"
    ATTR{removable}=="0"
    ATTR{range}=="16"
    ATTR{dev}=="8:0"

  looking at parent device '/devices/pci0000:00/0000:00:07.0/host0/target0:0:0/0:0:0:0':
    KERNELS=="0:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{ioerr_cnt}=="0x0"
    ATTRS{iodone_cnt}=="0x31737"
    ATTRS{iorequest_cnt}=="0x31737"
    ATTRS{iocounterbits}=="32"
    ATTRS{timeout}=="30"
    ATTRS{state}=="running"
    ATTRS{rev}=="3.42"
    ATTRS{model}=="ST3120827AS     "
    ATTRS{vendor}=="ATA     "
    ATTRS{scsi_level}=="6"
    ATTRS{type}=="0"
    ATTRS{queue_type}=="none"
    ATTRS{queue_depth}=="1"
    ATTRS{device_blocked}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:07.0':
    KERNELS=="0000:00:07.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="sata_nv"
    ATTRS{vendor}=="0x10de"
    ATTRS{device}=="0x037f"


s you can see, udevinfo simply produces a list of attributes you can use as-is as match keys in your udev rules. From the above example, I could produce (e.g.) either of the following two rules for this device:

SUBSYSTEM=="block", ATTR{size}=="234441648", NAME="my_hard_disk"
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="ST3120827AS", NAME="my_hard_disk"
You may have noted the use of colour in the above examples. This is to demonstrate that while it is legal to combine the attributes from the device in question and a single parent device, you cannot mix-and-match attributes from multiple parent devices - your rule will not work. For example, the following rule is invalid as it attempts to match attributes from two parent devices:

SUBSYSTEM=="block", ATTRS{model}=="ST3120827AS", DRIVERS=="sata_nv", NAME="my_hard_disk"
это отсюда http://reactivated.net/writing_udev_rules.html

Владимир Дашевский
member
Сообщения: 21
Зарегистрирован: 24 янв 2008, 17:12
Откуда: Санкт-Петербург
Контактная информация:

Re: hot swap для SATA на базе ICH9R в linux debian (2.6.25)

Сообщение Владимир Дашевский » 20 мар 2009, 13:08

Вот по поводу безопасного доставания диска мне ответил один из авторов libata:

Код: Выделить всё

# echo 1 > /sys/block/sdX/device/delete

Ответить

Вернуться в «Серверы - ПО, Unix подобные системы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей