Wiki source for GeometriaDysku
====Problem z geometrią dysku w laptopie====
**Objawy**
SuSE 10 działa na moim IBM-ie rewelacyjnie, chodzi szybko, wszystkie (naprawdę wszystkie!) funkcje chodzą jak się patrzy. Ponieważ nie lubię wyłączać komputera, intensywnie używam funkcji "standby". No i tej używam również w ww. konfiguracji. O ile pod SuSE 9.1 po paru kombinacjach funkcja ta działała rewelacyjnie (uptime: 309 dni!), to pod SuSE 10.0 kombinacji nie musiałem uskuteczniać - po instalacji z parametrem acpi=off wszystko działało w zasadzie jak trzeba (powermanagement przez APM, nie przez ACPI).
Jednak jeden problem pojawiał się czasem i nie wiedziałem o co chodzi: po wyjściu ze standby (albo suspend to RAM, jak się to nazywa) niekiedy komputer robił się wolniejszy i okazywało się, że wyłączał sobie DMA dla twardego dysku. Rzut okiem w logi dał taki oto obraz sytuacji:
''
May 1 14:57:54 ibm kernel: ide0: reset: success
May 1 14:57:54 ibm kernel: hda: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
May 1 14:57:54 ibm kernel: hda: task_in_intr: error=0x10 { SectorIdNotFound }, LBAsect=156301488, high=9, low=5306544, sector=156301488
May 1 14:57:54 ibm kernel: ide: failed opcode was: unknown
May 1 14:57:54 ibm kernel: end_request: I/O error, dev hda, sector 156301488
May 1 14:57:54 ibm kernel: Buffer I/O error on device hda, logical block 156301488
''
Ponadto stwierdziłem, że:
- sektor, którego system chce czytać (156301488), jest poza nominalnym rozmiarem dysku (!),
- dysk ma 156301487 sektorów,
- po starcie (bez używania standby) problemów takich nie ma
**Rozwiązanie**
Ponieważ już znałem podobne problemy pod SuSE 9.1, szybko znalazłem podpowiedzi, w którą stronę powinienem szukać:
- problem dotyczy rozmiarów dysku
- jest on związany (być może, teraz nie jestem tego pewien) również z IBM-em, ponieważ posiada on tzw, "host protected area" (patrz tutaj: [[http://www.thinkwiki.org/wiki/Hidden_Protected_Area ThinkPad - Wiki]])
Po 2h poszukiwań stwierdzam, że 1) God bless the internet oraz 2) Linux is the best, czyli:
1) Istnieje narzędzie pt. "disk_stat", przy pomocy którego można wczytać ważne dane o dysku i wyłączyć "host protected area" (patrz tutaj: [[http://www.sleuthkit.org/sleuthkit/tools.php pakiet "sleuthkit"]])
1) a jeszcze lepszy jest programik "setmax.c" (znajdziesz go [[http://www.win.tue.nl/~aeb/linux/setmax.c tutaj]])
Ten ostatni trzeba jeszcze skompilować:
''cc -o setmax setmax.c''
i wystartować:
''./setmax /dev/hda''
Ustawienie ostatniego sektora na trwałe poniżej wartości sektora, który jest ostatnim fizycznym powoduje, że:
1) tworzony jest "host protected area", którego linux bez problemu rozumie i wykrywa
1) system nie zagląda nie tam gdzie trzeba
1) zarówno po starcie systemu jak i po wyjściu ze stanu "standby"
**Objawy**
SuSE 10 działa na moim IBM-ie rewelacyjnie, chodzi szybko, wszystkie (naprawdę wszystkie!) funkcje chodzą jak się patrzy. Ponieważ nie lubię wyłączać komputera, intensywnie używam funkcji "standby". No i tej używam również w ww. konfiguracji. O ile pod SuSE 9.1 po paru kombinacjach funkcja ta działała rewelacyjnie (uptime: 309 dni!), to pod SuSE 10.0 kombinacji nie musiałem uskuteczniać - po instalacji z parametrem acpi=off wszystko działało w zasadzie jak trzeba (powermanagement przez APM, nie przez ACPI).
Jednak jeden problem pojawiał się czasem i nie wiedziałem o co chodzi: po wyjściu ze standby (albo suspend to RAM, jak się to nazywa) niekiedy komputer robił się wolniejszy i okazywało się, że wyłączał sobie DMA dla twardego dysku. Rzut okiem w logi dał taki oto obraz sytuacji:
''
May 1 14:57:54 ibm kernel: ide0: reset: success
May 1 14:57:54 ibm kernel: hda: task_in_intr: status=0x59 { DriveReady SeekComplete DataRequest Error }
May 1 14:57:54 ibm kernel: hda: task_in_intr: error=0x10 { SectorIdNotFound }, LBAsect=156301488, high=9, low=5306544, sector=156301488
May 1 14:57:54 ibm kernel: ide: failed opcode was: unknown
May 1 14:57:54 ibm kernel: end_request: I/O error, dev hda, sector 156301488
May 1 14:57:54 ibm kernel: Buffer I/O error on device hda, logical block 156301488
''
Ponadto stwierdziłem, że:
- sektor, którego system chce czytać (156301488), jest poza nominalnym rozmiarem dysku (!),
- dysk ma 156301487 sektorów,
- po starcie (bez używania standby) problemów takich nie ma
**Rozwiązanie**
Ponieważ już znałem podobne problemy pod SuSE 9.1, szybko znalazłem podpowiedzi, w którą stronę powinienem szukać:
- problem dotyczy rozmiarów dysku
- jest on związany (być może, teraz nie jestem tego pewien) również z IBM-em, ponieważ posiada on tzw, "host protected area" (patrz tutaj: [[http://www.thinkwiki.org/wiki/Hidden_Protected_Area ThinkPad - Wiki]])
Po 2h poszukiwań stwierdzam, że 1) God bless the internet oraz 2) Linux is the best, czyli:
1) Istnieje narzędzie pt. "disk_stat", przy pomocy którego można wczytać ważne dane o dysku i wyłączyć "host protected area" (patrz tutaj: [[http://www.sleuthkit.org/sleuthkit/tools.php pakiet "sleuthkit"]])
1) a jeszcze lepszy jest programik "setmax.c" (znajdziesz go [[http://www.win.tue.nl/~aeb/linux/setmax.c tutaj]])
Ten ostatni trzeba jeszcze skompilować:
''cc -o setmax setmax.c''
i wystartować:
''./setmax /dev/hda''
Ustawienie ostatniego sektora na trwałe poniżej wartości sektora, który jest ostatnim fizycznym powoduje, że:
1) tworzony jest "host protected area", którego linux bez problemu rozumie i wykrywa
1) system nie zagląda nie tam gdzie trzeba
1) zarówno po starcie systemu jak i po wyjściu ze stanu "standby"