libATA - világosítsatok fel

Hali!

A linux kernelben van ez a két dolog:
- ATA/ATAPI/MFM/RLL support
- Serial ATA (prod) and Parallel ATA (experimental) drivers

Ha jól vettem ki, akkor ez az utóbbi a libATA lenne, amely a SATA-s lemezek kezelését hivatott végezni + elvileg a régi PATA eszközök meghajtói is ide lesznek/vannak átportolva, átírva.
A rendszerem alapvetően IDE PATA rendszerű.

$ lspci -v | grep IDE
00:0d.0 IDE interface: nVidia Corporation MCP51 IDE (rev a1) (prog-if 8a [Master SecP PriP])

Valamint van egy külső USB2.0 rack házam (JMicron IDE SATA to USB) benne egy SATA2-es Samsung merevlemezzel.
Az érdekelne, hogy miként lehet "átállni" a régebbi "ATA/ATAPI/MFM/RLL support"-ról libATA használatára?
Melyek azok a dolgok, amelyeket meg kellene hagynom a régiből? Gondolok itt ilyenre " Include IDE/ATAPI CDROM support".
Vagy teljesen kikapcsolaható ez a menüpont és a "Serial ATA (prod) and Parallel ATA (experimental) drivers" rész lekezel mindent (PATA CDROM, DMA, stb.)?

UI.: Az világos, hogy a /dev/hdx -> /dev/sdx lesz, illetve a dvdromnál valami sg0, ezért fstab-ra figyeljek. Világos az is, hogy kell SCSI támogatás is a kernelbe.

Hogy leegyszerűsítsem a kérdésemet. A libATA-s dolgok a teljes IDE rendszerhez tartozó dolgokat lekezelik és ezért kikapcsolható a ATA/ATAPI... cucc, vagy az alap IDE dolgok kellenek és csak a chipset specifikus dolgokat lehet lecserélni a libATA-s megfelelőkkel? Vagy nagy a homály bennem? :D

Hozzászólások

Nem pontosan ertem mi az amit szeretnel, de kevereg benned a taroloeszkoz, atviteli mod fogalma. Neked a usb-s hazad a usb-mass-storage modullal kapcsolodik ami scsi fuggosegu.

Közben megoldottam. Így megválaszolom saját kérdésem, hátha másnak is jóljön.
Rátaláltam erre a levélre. Talán Alan Cox írta?

Egy teljesen PATA rendszeren (kivéve rack) átáltam libata-ra és teljesen kikapcsoltam a "ATA/ATAPI/MFM/RLL support" támogatást, ahogy a levél is ajánlotta. Ehhez muszály volt, hogy a SCSI disk /cdrom / general funkciókat statikusan fordítam bele a kernelbe, mivel nincs initrd.
"Serial ATA (prod) and Parallel ATA (experimental) drivers"-ből csak az engem éríntő részt "Nvidia PATA, General PATA" állítottam be, szintén statikusra.
Reboot előtt az fstab fájlt átírtam, hogy ne fixen a device nevek alapján mountoljon, hanem UUID alapján. Az UUID értékeket a vol_id segédprogram segítségével állapítottam meg, ez az udev csomag része.
Mivel crypto swap-ot használok, biztos ami biztos ezt kikapcsoltam és csak sikeres reboot után kapcsoltam vissza.
Meglepő módon elsőre sikerült az egész. Hdparm-os szkriptem is szépen működik miután átírtam a device node-ot.

#!/bin/bash

on_ac_power && battery="0" || battery="1"

case $battery in
0)
echo -n "A laptop hálózati áramforráson van!"
hdparm -S253 -M254 -B255 /dev/sda
#hdparm -S253 -M254 -B255 /dev/hdc # -M254 zajcsokkentes kikapcs, standby gyárira, APM kikapcs
echo "A merevlemez a gyári érték után kapcsol standby-ba"
cpufreq-selector -g ondemand && echo "Setting cpu governor to 'ondemand'"
echo 0 > /proc/sys/vm/laptop_mode && echo "Laptop mode disabled"
;;
1)
echo -n "A laptop az akkumulátorról megy!"
hdparm -S253 -M128 -B200 /dev/sda
echo "Standby = gyári, quiet üzemmód, alacsonyabb APM mód!"
cpufreq-selector -g ondemand && echo "Setting cpu governor to 'ondemand'"
echo 5 > /proc/sys/vm/laptop_mode && echo "Laptop mode enabled"
;;
*)
echo "Hiba! Nem allitottunk semmit!"
;;
esac

# -B = Advanced Power Management
# -M = Automatic Acoustic Management
# -S = Spindown timeout

Ezzel a merevlemez kattogás is megoldva :)

Tapasztalatok:
-Desktop sebesség változatlan, sőt talán kicsit gyorsabban reagál a rendszer, bár ez lehet attól is, hogy 250Hz->1000Hz váltás is történt.

$ hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 1490 MB in 2.00 seconds = 744.70 MB/sec
Timing buffered disk reads: 110 MB in 3.01 seconds = 36.58 MB/sec

-gnome-mount applet kicsit zavarosan működik még mindig. 1-2 partíciót fstab-ból csatolok (backup, cdrom), ezek szépen meg is jelennek, de minden egyes ilyen partíciónak létrehoz egy külön, számozott ikont "lecsatolva" állapottal. Pl. y-meghajto -> y-meghajto(2)
-szépen egységesen látszik mostmár minden lemez: sda,sdb,sg0. Eddig kicsit zavaró volt, hogy hdc volt a merevlemez, hda a DVD és sda a rack.

--
http://kac.duf.hu/~balage/blog

1. "úgyse fog használni" => akkor minek bele? ki vele :)

2. Modulba inkább olyan dolgokat raknék, amelyeket ritkán ugyan, de használok.
Pl. usb-storage + scsi modulok, mert csak heti 1-2 alkalommal van rádugva egy pendrive/usb-rack a gépre.
Illetve lehet még pár ok amiért modulba rak az ember valamit. De alapvetően 1. pont :)

--
http://kac.duf.hu/~balage/blog

Ezt annyira nem vágom mire gondolsz.
Ha lefordítottál már egy kernelt, akkor gondolom megvan még a .config fájl (rejtett fájl). Ez tartalmazza a kernel konfigurációdat. Ha ez megvan, akkor nem kell újrakezdened, elég betölteni, módosítani és újrafordítani a kernelt, majd telepíteni.

0. cd /usr/src/linux (vagy ahova raktad)
1. ".config" fájl kimásol valahova (backup)
2. make mrproper (Mr. Proper mindent kitisztít)
3. ".config" fájlt visszamásolod
4. make menuconfig (elvégzed a módosításokat)
5. make && make modules && make modules_install
6. új kernel telepítése a /boot-ba (bzImage / System.map)

Tipp: ha többmagos processzorod van, akkor a "-j" kapcsolóval több szálon tudod futtatni a fordítást, ergo hamarabb végez. Például: "make -j4 && make modules -j4 && make modules_install" (a legutolsóból szándékosan hagytam ki)

--
http://kac.duf.hu/~balage/blog

Az éppen futó, betöltött verziójú kernelt természetesen újra tudod fordítani, amennyiben rendelkezel a forráskóddal és a .config fájllal is. Ez a folyamat teljesen független az éppen futó kerneltől.

Tehát ha gép indulásakor kiválasztottad a 2.6.x-et, akkor ettől függetlenül képes vagy 2.6.x, 2.6.y, 2.6.z stb kernelt fordítani. A fordítás végeztével kell a lefordított kernelt telepítened, majd a következő indításkor azt indítanod.

Egy kis segítség:
- kernel fordítás képekkel illusztrálva
- Kernel fordítás Debian Linux alatt - utóbbi doksiért köszönet Bandinak :)
--
http://kac.duf.hu/~balage/blog

kösz, nagyjából működik

viszont grub-install mostmár nem megy:

$ mount
/dev/sda2 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/dev/sda3 on /home/viktor type ext3 (rw)
/dev/sda1 on /mnt/win type vfat (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)

$ cat /etc/fstab
# /etc/fstab: static file system information.
#
#

proc /proc proc defaults 0 0
/dev/sda2 / ext3 defaults,errors=remount-ro 0 1
/dev/sda3 /home/viktor ext3 defaults 0 0
/dev/sda1 /mnt/win vfat defaults 0 0
/dev/sda4 none swap sw 0 0
/dev/sdc /media/cdrom0 udf,iso9660 user,noauto 0 0

# grub-install /dev/sda
/dev/sda does not have any corresponding BIOS drive.
# grub-install /dev/hda
/dev/hda: Not found or not a block device.

$ cat /boot/grub/menu.lst
...
title Linux 2.6.24-rc6-git12
root (hd0,1)
kernel /boot/vmlinuz-2.6.24-rc6-git12 root=/dev/sda2 ro
savedefault
title Linux 2.6.24-rc6-git12 (single)
root (hd0,1)
kernel /boot/vmlinuz-2.6.24-rc6-git12 root=/dev/sda2 ro single
savedefault

title Linux 2.6.24-rc6
root (hd0,1)
kernel /boot/vmlinuz-2.6.24-rc6 root=/dev/hda2 ro
savedefault

title Linux 2.6.24-rc6 (single)
root (hd0,1)
kernel /boot/vmlinuz-2.6.24-rc6 root=/dev/hda2 ro single
savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

# This is a divider, added to separate the menu items below from the Debian
# ones.
title Other operating systems:
root

# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/hda1
title Microsoft Windows XP Home Edition
root (hd0,0)
savedefault
makeactive
chainloader +1

na, ilyenkor vajon mi a teendő. ja, egyébként engem az zavart meg, hogy grub menuben root (hd0,1), de root=/dev/sda2. ha átírom root (sd0,1)-re, akkor nem indul.

plusz érdekességként először átírtam fstabban
/dev/hda2 / ext3 defaults,errors=remount-ro 0 1
re, amíg grubban javítottam a sd0,1-et, utána nem írtam át, és a libata-s kernel ugyanúgy felmountolta a /dev/hda2-t (és mellette a többi /dev/sda-s cuccot), látszottak a fájlok, annak ellenére, hogy nem létezik a /dev/hda :)

kernel config

szerk: hmm, most jutott eszembe, lehet, hogy fstabban meghagyom hda-nak a dolgokat (+ menu.lst-ben is), hátha úgy jó lesz. na majd holnap. de azért, ha nektek más az elképzelésetek, ne tartsátok vissza

nem vált be. ha grubban átírom /dev/hda2-re, akkor pánikba esik
fstab-ban átírás szintén nem válik be, valamiért csak /dev/hda2 (/)-vel működik a trükk, a többit nem találja (habár egyáltalán nincs /dev/hda*)

úgyhogy érdekes:)

szóval maradt minden úgy, ahogy az előbb írtam, egyelőre ez a legkevésbé sz*r megoldás, viszont grub-install továbbra is görcsöl

vagy (ál)scsi lemezeken nem lehet mbr-be telepíteni a grub-ot? vagy mi...
még lehet, hogy próbát teszek lilo-val (ezt már tényleg holnap), ha addig nem jut eszembe valami más, vagy ti nem álltok elő valami ötlettel

A grub csak (hdx,x) formában látja az eszközöket. A root=/dev/sdx más, az kernelnek átadott paraméter.
Amit leírtál tünet, akkor fordulhat elő, ha jól emlékszem, hogy benne marad a régi ata rendszer is egyidőben a libata-val, pedig azt a kernel configod-ban nem láttam.
Ha segít, akkor itt az én kernel config fájlom (2.6.23).

fstab részlet így néz ki:

#/dev/hdc1 /boot ext2 noauto,ro,noatime 1 2
UUID=3ee7e92f-198d-4a20-8e55-55eb4426fe76 /boot ext2 noauto,ro,noatime 1 2
#/dev/hdc2 / ext3 defaults,noatime 0 1
UUID=1f6146fb-7c89-4c3a-b6c0-80ae8f220e86 / ext3 defaults,noatime 0 1
#/dev/hdc4 /home ext3 defaults,noatime,user_xattr 0 2
UUID=1859ae58-efb4-465f-91be-74e8ef5d9a45 /home ext3 defaults,noatime 0 2
/dev/sg0 /mnt/cdrom auto user,noauto 0 0

A régi device node-os formátumot átírtam UUID-re, így bármi legyen a device node, megfelelően csatolja a rendszer a partíciókat.

--
http://kac.duf.hu/~balage/blog