środa, lutego 18, 2009

The screen behind the mirror

Jeszcze nie napisałem ani jednego zdania, a już wiem, że ten post będzie wyjątkowo długi za sprawą outputów z konsoli. Zaczynam się nie wyrabiać z tempem dokumentowania moich zabaw na Armadzie. Mam zamiar postawić na tym laptopie jakiegoś Linuksa, ale ponieważ system w obecnej konfiguracji jest sprawny postanowiłem użyć trochę "linuksowej czarnej magii" do stworzenia obrazu całego dysku na wypadek, gdyby coś poszło nie tak. Zabrałem więc się do ponownego rozkręcania laptopa wyciągając moduł dyskowy. Najbardziej męczące w rozkręcaniu są śruby, których gwint ma dość dziwną konstrukcję. Ale odrobina samozaparcia i stoickiej cierpliwości, a udało się wydobyć dysk. Na ten dzień pożyczyłem sobie od kolegi mostek USB 2.0 na SATA/IDE 2,5" 3,5". Fajna zabawka pozwalająca na trzymanie "zgrabnego 650GB pendrive'a" ]:) Ja jednak jej użyłem do podpięcia laptopowego dysku pod keepera, moją zakładową maszynę na której mam postawionego Archlinuksa. Pierwszy raz bawiłem się takim gadżetem i w dodatku pod pingwinem, więc pracę rozpocząłem od standardowego sprawdzenia jako root, czy wszystko działa jak powinno.
[lightnir@keeper ~/]$ su
The Evil One> lsusb
Bus 005 Device 006: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge
Bus 005 Device 001: ID 1d6b:0002
Bus 004 Device 001: ID 1d6b:0001
Bus 003 Device 001: ID 1d6b:0001
Bus 002 Device 002: ID 046d:c018 Logitech, Inc.
Bus 002 Device 001: ID 1d6b:0001
Bus 001 Device 002: ID 046d:c312 Logitech, Inc.
Bus 001 Device 001: ID 1d6b:0001
The Evil One> fdisk -l

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          24      192748+  83  Linux
/dev/sda2           19093       19457     2931862+  82  Linux swap / Solaris
/dev/sda3              25       19092   153163710   83  Linux

Partition table entries are not in disk order

Disk /dev/sdb: 4099 MB, 4099866624 bytes
128 heads, 63 sectors/track, 993 cylinders
Units = cylinders of 8064 * 512 = 4128768 bytes
Disk identifier: 0xbdd2bdd2

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1         993     4003744+   c  W95 FAT32 (LBA)
A więc sprzęt działa i laptopowy dysk jest widoczny jako /dev/sdb. Przystąpiłem więc do stworzenia obrazu dysku używając do tego uniksowego polecenia dd.
The Evil One> dd if=/dev/sdb of=/obraz.img
8007489+0 przeczytanych recordów
8007489+0 zapisanych recordów
skopiowane 4099834368 bajtów (4,1 GB), 460,754 s, 8,9 MB/s
Jak widać trwało to dobre 8 minut. Zanim od montowałem laptopowy dysk sprawdziłem jeszcze informację od którego sektora zaczyna się partycja.
The Evil One> fdisk -ul /dev/sdb

Disk /dev/sdb: 4099 MB, 4099866624 bytes
128 heads, 63 sectors/track, 993 cylinders, total 8007552 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0xbdd2bdd2

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *          63     8007551     4003744+   c  W95 FAT32 (LBA)
Teraz trochę matematyki 63 sektorów na ścieżkę × 512 bajtów na sektor = 32256. Według tutoriala, którego wtedy używałem taki właśnie offset powinna mieć pierwsza partycja na dysku. Zabrałem się więc do próby zamontowania utworzonego obrazu dysku w celu sprawdzenia jego poprawności.
The Evil One> mkdir /mnt/dysk
The Evil One> mount -o loop,offset=32256 -t vfat obraz.img /mnt/dysk
mount: could not find any device /dev/loop#
Hmm, pierwsza niespodzianka - loop device nie istnieje. Nie wiem jak jest w innych dystrybucjach, ale w tym momencie się dowiedziałem, że w dystrybucji Archlinux trzeba załadować stosowny moduł.
The Evil One> modprobe loop
The Evil One> mount -o loop,offset=32256 -t vfat obraz.img /mnt/dysk
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
The Evil One> dmesg|tail
FAT: Directory bread(block 15658) failed
FAT: Directory bread(block 15659) failed
FAT: Directory bread(block 15660) failed
FAT: Directory bread(block 15661) failed
FAT: Directory bread(block 15662) failed
FAT: Directory bread(block 15663) failed
FAT: Directory bread(block 15664) failed
FAT: Directory bread(block 15665) failed
FAT: bogus number of reserved sectors
VFS: Can't find a valid FAT filesystem on dev loop0.
ok, druga niespodzianka. Co jest grane? Jak to nie ma systemu plików skoro go dopiero przed chwilą zgrywałem? Wgryzłem się w czytanie manuala jak to jest z montowaniem obrazów dysków. Istotna jest w tym momencie wiedza, w którym miejscu zaczyna się partycja, bo przecież można mieć obraz dysku zawierającego wiele partycji. Mnie się wydawało, że partycja powinna się zaczynać przy offsecie 32256, czyli bezpośrednio po tablicy FAT. Obraz nie montował się poprawnie ponieważ myliłem się co do offsetu. Na szczęście udało mi się zastosować "brudne rozwiązanie" - skrypt shellowy.

forcemount.sh(Toggle Plain Text)

1
2
3
4
5
#!/bin/bash

for ((i=0 ; $i < 40000 ; i=$i + 1)) ; do
    mount -o loop,offset=$(($i * 512)) -t vfat obraz.img /mnt/dysk && break
done
The Evil One> ./forcemount.sh
The Evil One> mount|grep obraz.img
/obraz.img on /mnt/dysk type vfat (rw,loop=/dev/loop0,offset=0)
The Evil One> cd /mnt/dysk
The Evil One> ls -l
razem 71400
-rwxr-xr-x  1 root root      416 sty  4  1980 LEGO Creator Knights Kingdom Error Log_0.log
drwxr-xr-x  4 root root     4096 cze 15  2002 Moje dokumenty
drwxr-xr-x  3 root root     4096 cze 15  2002 Multimedia Files
drwxr-xr-x 26 root root     4096 cze 13  2002 Program Files
-rwxr-xr-x  1 root root      278 sty  6  1980 autoexec.bat
drwxr-xr-x  2 root root     4096 gru  7  2005 boot
-rwxr-xr-x  1 root root    22714 sty  4  1980 bootlog.prv
-rwxr-xr-x  1 root root    22968 sty  4  1980 bootlog.txt
-rwxr-xr-x  1 root root    95764 lis 12  1996 command.com
drwxr-xr-x  3 root root     4096 cze 15  2002 compaq
-rwxr-xr-x  1 root root      100 sty  6  1980 config.sys
-rwxr-xr-x  1 root root      636 cze 15  2002 detlog.old
-rwxr-xr-x  1 root root    68890 sty  4  1980 detlog.txt
-rwxr-xr-x  1 root root     5412 gru 13  2005 ffastun.ffa
-rwxr-xr-x  1 root root    65536 gru 13  2005 ffastun.ffl
-rwxr-xr-x  1 root root    53248 gru 13  2005 ffastun.ffo
-rwxr-xr-x  1 root root   516096 gru 13  2005 ffastun0.ffx
-rwxr-xr-x  1 root root     4096 sty  4  1980 file0001.chk
drwxr-xr-x  7 root root     4096 lut  2  2003 fp6
-r-xr-xr-x  1 root root 19024896 cze 15  2002 hibrn8.dat
-r-xr-xr-x  1 root root   214836 lis 12  1996 io.sys
drwxr-xr-x  2 root root     4096 mar  6  2004 janusz
-rwxr-xr-x  1 root root 51200000 gru  9  2005 linux.swp
-rwxr-xr-x  1 root root   129078 lis 12  1996 logo.sys
drwxr-xr-x  4 root root     4096 lip 14  2003 misc
drwxr-xr-x  3 root root     4096 gru 20  2002 monika
-rwxr-xr-x  1 root root       22 cze 13  2002 msdos.---
-r-xr-xr-x  1 root root     1641 sty  6  1980 msdos.sys
-rwxr-xr-x  1 root root      742 cze 13  2002 netlog.txt
-rwxr-xr-x  1 root root    34304 lis 10  2002 plan.doc
drwxr-xr-x  2 root root     4096 cze 15  2002 recycled
-rwxr-xr-x  1 root root    54097 cze 13  2002 setuplog.txt
-r-xr-xr-x  1 root root     5166 cze 13  2002 suhdlog.dat
-r-xr-xr-x  1 root root  1479672 cze 15  2002 system.1st
drwxr-xr-x  2 root root     4096 maj  1  2003 wchf
drwxr-xr-x 43 root root    12288 cze 13  2002 windows
drwxr-xr-x  4 root root     4096 cze 18  2002 ~mssetup.t      
A więc offset pierwszej partycji wynosił 0, a nie 32256 jak mi się początkowo wydawało. Jak widać obraz się zamontował i widoczna jest zawartość "dysku c". Teraz pozostaje mi zastanowienie się jakiego Linuksa wybrać do postawienia na tym laptopie oraz jak go w ogóle tam zainstalować? Może ktoś ma jakieś sugestie odnośnie dobrej dystrybucji?

1 komentarz:

Łukasz pisze...

ja się nie znam, ale bym chętnie widział tam ubuntu ;)