Dzięki, chłopaki, ale zrobiłem po "linuksowemu". Dla potomnych:
Do przeprowadzenia tej operacji potrzebne są programy xdftool i rdbtool z pakietu
amitools. Ja bez większego problemu skompilowałem i zainstalowałem je sobie na moim PLD, więc nie powinno być też problemu na bardziej standardowych dystrybucjach typu Debian, Ubuntu itp. Potrzebny jest też czytnik kart CF (załóżmy, że karta będzie widziana pod Linuksem jako /dev/hdc, w innym przypadku trzeba dopasować jedną literkę).
Zacznijmy od utworzenia obrazu karty źródłowej. Ja to robię najprostszą metodą, mianowicie:
$ cat /dev/sdc > stary.img
Jeśli ktoś woli używać dd, to można i tak:
$ dd if=/dev/sdc of=stary.img
Za pomocą rdbtool można sprawdzić, jak widoczny jest dysk. U mnie wygląda to tak:
$ rdbtool stary.img info
PhysicalDisk: 0 992 1000944 488Mi heads=16 sectors=63
LogicalDisk: 2 992 998928 487Mi rdb_blks=[0:2015,#2016] used=[hi=49,#50] cyl_blks=1008
Partition: #0 'DH0' 2 497 499968 244Mi 50.05% DOS1/0x444f5301 max_transfer=0xffffff mask=0x7ffffffe num_buffer=30 bootable pri=0
Partition: #1 'DH1' 498 992 498960 243Mi 49.95% DOS1/0x444f5301 max_transfer=0xffffff mask=0x7ffffffe num_buffer=30
FileSystem #0 DOS1/0x444f5301 version=0.0 size=22464 seg_list_blk=0x4 global_vec=0xffffffff
Jak widać, na mojej karcie są 2 partycje DH0 i DH1 i rozmiarze ~244MB każda. Same oznaczenia partycji mogą być istotne (ja zakładam, że są i takiej wersji się będę trzymał). Dodatkowo można jeszcze obejrzeć pliki na partycjach (proszę zauważyć, że podaję nazwy partycji zgodne z informacjami z poprzedniej komendy, aczkolwiek w przypadku part= można używać numerów 0 i 1, znaczą to samo):
$ xdftool stary.img open part=DH0 + list
System VOLUME -------- 02.05.2008 22:35:57 t04 DOS3:ffs+intl
[...]
sum: 8120 4.0Mi 4157440
data: 7500 3.7Mi 3840000 92.36%
fs: 620 310Ki 317440 7.64%
$ xdftool stary.img open part=DH1 + list
Data VOLUME -------- 03.05.2008 00:48:54 t32 DOS3:ffs+intl
[...]
sum: 20076 9.8Mi 10278912
data: 19641 9.6Mi 10056192 97.83%
fs: 435 217Ki 222720 2.17%
W dalszych krokach użyję informacji z tego wydruku, a mianowicie etykiet "System" i "Data" dla systemów plików na poszczególnych partycjach.
Kolejnym krokiem jest zgranie danych z karty wraz z odpowiednimi metadanymi. Do tego celu użyję xdftool:
$ xdftool stary.img open part=DH0 + unpack System
$ xdftool stary.img open part=DH1 + unpack Data
Teraz trzeba przygotować cel. Najpierw tzeba sprawdzić, jak "widzi"
nową kartę Amiga. Ja w tym celu podłączyłem ją pod port IDE i odpaliłem z dyskietki instalacyjnej Workbencha, a następnie za pomocą HDToolBox-a wyciągnąłem tą informację (jeśli istnieje prostszy sposób, prosiłbym o info). W moim przypadku dla katy SanDisk Ultra 4GB CompactFlash 30MB/s geometria to: 7751 cylindrów, 16 głowic, 63 sektory/ścieżkę. Mając tą informację oraz dane z poprzednich kroków, za pomocą rdbtool przygotowujemy obraz nowego dysku:
$ rdbtool nowy.img create chs=7751,16,63 + init rdb_cyls=2 + add start=2 end=1000 name=DH0 dostype=0x444f5303 pri=0 bootable=yes + add start=1001 end=2000 name=DH1 dostype=0x444f5303
Powyższa komenda powoduje utworzenie obrazu dysku (komenda create) o geometrii 7751,16,63 (dane zgodne z tymi powyżej), zainicjowaniu go (komenda init) oraz utworzeniu na nim dwóch partycji DH0 i DH1 zajmujących po ok. 1000 cylindrów każda (co daje partycje o rozmiarze niecałych 0.5GB). Pozostała część obrazu jest niewykorzystana i można ją później spartycjonować już na Amidze. Parametry podane w dostype pochodzą z wyniku rdbtool na starym obrazie (patrz wyżej) i zapewne można je pominąć, ale czy na pewno - nie sprawdzałem. Dodatkowo partycja DH0 jest ustawiana jako bootowalna.
W kolejnym kroku partycje trzeba sformatować:
$ xdftool nowy.img open part=DH0 + format System ffs+intl
$ xdftool nowy.img open part=DH1 + format Data ffs+intl
Etykiety dla poszczególnych filesystemów ustaliłem na zgodne z etykietami wejściowymi, stąd "System" i "Data", aczkolwiek to wymaganie zapewne konieczne nie jest (resztą jak zapewne kilka innych rzeczy, których użyłem, ale to wynika z mojej niewiedzy i wygląda na nadmiarowe, acz bezpieczne). Ostatecznie obraz przedstawia się teraz tak:
$ rdbtool nowy.img info
PhysicalDisk: 0 7750 7813008 3.7Gi heads=16 sectors=63
LogicalDisk: 2 7750 7810992 3.7Gi rdb_blks=[0:2015,#2016] used=[hi=2,#3] cyl_blks=1008
Partition: #0 'DH0' 2 1000 1006992 491Mi 12.89% DOS3/0x444f5303 max_transfer=0xffffff mask=0x7ffffffe num_buffer=30 bootable pri=0
Partition: #1 'DH1' 1001 2000 1008000 492Mi 12.90% DOS3/0x444f5303 max_transfer=0xffffff mask=0x7ffffffe num_buffer=30
Nie jest idealnie taki jak źródłowy, ale nie o to chodzi. Teraz trzeba nagrać na niego dane:
$ xdftool nowy.img open part=dh0 + pack System
$ xdftool nowy.img open part=dh1 + pack Data
Obraz jest gotowy. Możemy sobie sprawdzić jego zawartość za pomocą
$ xdftool nowy.img open part=DH0 + list
[...]
$ xdftool nowy.img open part=DH1 + list
[...]
Ostatnim krokiem jest nagranie obrazu na docelową kartę (oczywiście po zamianie kart w czytniku):
$ cat nowy.img > /dev/sdc
Moja A600 bez najmniejszego problemu wstała z tak przygotowanej karty CF. HDToolBox pozwala mi na dalsze jej partycjonowanie (czy można mieć na jednej karcie kilka wersji Workbencha na różnych partycjach?). Bez większego problemu powinno się udać tym sposobem przenieść również dane między klasycznymi twardymi dyskami, może między SDD a CF - teoretycznie problemów być nie powinno.
Ostatnia aktualizacja: 05.05.2016 17:28:28 przez perinoid