Vytvoření ISO obrazu, kontrola a následné vypálení na CD nebo DVD a to vše pouze za použití příkazové řádky. Tvorba multisession CD/DVD.
20.2.2006 06:00 | o.k. | přečteno 37552×
Vypalování CD/DVD patří dlouhou dobu neodmyslitelně k úkonům, které v Linuxu potřebuje uživatel čas od času provádět. Většina uživatelů se uchyluje ke grafickým nadstavbám, kde si jednoduše a bezmyšlenkovitě přesune soubory z jednoho okna do druhého a stiskne tlačítko pro vypalování. Samozřejmě i takto lze vypalovat, ale tento uživatel se potom dostane do úzkých, když musí data vypálit na Linuxu bez grafického prostředí nebo na dálku provést zálohování dat na vzdáleném serveru jejich vypálením na CD/DVD.
Tento díl seriálu o Linuxu v příkazech by měl posloužit jako návod jak v příkazové řádce vypalovat.
Než začneme samotné vypalování, tak si musíme připravit zdroj dat, která chceme vypálit a vytvořit z něj tzv. ISO image (ISO obraz chcete-li). Ano, v podobě ISO obrazů se na Internetu také distribuuje většina distribucí.
Pokud chceme zkopírovat CD (nebo DVD) na kterém již nějaká ta volně stažitelná distribuce je, tak to můžeme provést jednoduše tímto příkazem:
dd if=/dev/hdd of=distribuce.iso
První parametr příkazu dd
, který slouží
k blokovému kopírování dat udává
blokové zařízení ze kterého budeme data kopírovat. Tedy zařízení mechaniky
CD/DVD-ROM. Pro připomenutí uvádím, že hda
je
primární master, hdb
primární
slave, hdc
sekundární master a hdd
sekundární
slave zařízení na IDE kanálu.
Druhý parametr udává umístění našich kopírovaných dat. Pozor na správnost
parametrů při používání příkazu dd
. Při chybné
specifikaci vstupů a výstupů
dokáže být program dd
více než destruktivní
a během pár vteřin tak
můžete přijít o svá data. Výše uvedeným příkazem jsme vytvořili ISO image CD,
které již můžeme přímo vypálit, čímž dosáhneme identické kopie původního
CD - tedy jeho klon.
Pro kopírování/klonování CD lze také s výhodou použít program
readcd
, který má navíc některé další užitečné funkce.
Umožňuje například snížit rychlost čtení dat z CD (nebo DVD), což se
dá využít v případě starého a poškrábaného CD (nebo DVD). Program
readcd
lze také využít pro vypalování, použijeme-li volbu
-w
.
readcd speed=2 dev=/dev/hdd f=distribuce.iso
Pro ty co nechtějí používat příkaz dd
nebo readcd
zde uvádím ještě další alternativu:
cat /dev/hdd > distribuce.iso
Pokud nechceme vytvářet identické kopie CD/DVD disků, ale pouze chceme
vypálit nějaká data musíme sáhnout po programu mkisofs
,
který slouží
k vytváření ISO obrazu souborového systému. Základní vysvětlení
tohoto příkazu provedu na jednoduchém příkladu:
mkisofs -o backup.iso /var/log/
Tímto jsme vytvořili ISO obraz s názvem backup.iso
,
jehož obsahem jsou
soubory a adresáře nacházející se v adresáři /var/log
.
Po vypálení bude toto
CD čitelné úplně ve všech systémech (Linux/Unix, Windows, Mac), ale
s tím omezením, že názvy souborů a adresářů budou ve starém DOSovém formátu
8+3. Abychom zachovali původní délky názvů (a případně další atributy), tak musíme ke klasickému formátu
ISO 9660 přidat rozšíření. Pro Linux/Unix to bude RockRidge (parametr
-R
), pro Windows
Joliet (parametr -J
) a pro Mac HFS. Tato rozšíření se dají mixovat, protože neexistuje
jediné univerzální rozšíření, které by zachovávalo ve všech těchto
systémech délku souborů a případně další atributy. Takže ISO obraz pro
systém Linux/Unix a Windows s plnou délkou souborů by se vytvořil
následujícím způsobem:
mkisofs -R -J -o backup.iso /var/log
Pokud budeme chtít nastavit automaticky všechna práva na souborech a adresářích
tak, aby tyto byly čitelné pro normální uživatele tak přidáme ještě parametr
-r
. Volba -r
je prakticky stejná jako -R
s tím rozdílem, že při
použití volby -r
se nastaví UID a GID všech
souborů a adresářů na 0 a
všechny bity (pro vlastníka, skupinu a ostatní) u souborů a adresářů jsou
nastaveny pro čtení. Pokud mají soubory nastaven nějaký bit pro spuštění, tak se
pro spuštění nastaví i ostatní bity (pro vlastníka, skupinu a ostatní). To
stejné platí i pro adresáře. Všechny bity pro zápis (a další speciální bity)
jsou smazány, protože na CD/DVD nemají smysl.
Příkaz mkisofs
má spoustu dalších voleb, jejichž
popis by vydal na samostatný
článek. Já zde uvedu pouze pár příkladů konfiguračních voleb s jednoduchým
komentářem, které se v praxi často používají. Další možnosti programu
mkisofs
naleznete v nápovědě k příkazu, manuálové stránce nebo
se můžete zeptat v diskuzi.
mkisofs -J -R -f -V "backup_etc050425" -o backup_etc.iso /etc
Vytvoření ISO obrazu (s rozšířením Rock Ridge a Joliet) adresáře
/etc
včetně
symbolických linků (jejich obsahem bude soubor/adresář na který odkazují).
CD bude mít název backup_etc050425
a výsledný ISO soubor se bude jmenovat backup_etc.iso
.
Občas se vám stane, že potřebujete do výsledného ISO souboru vložit více
adresářů, které jsou rozmístěné různě po souborovém systému.
Jednou z možností,
která každého jistě ihned napadne je vytvoření symbolických linků a použití
volby -f
.
Další a systémovější variantou je použití volby
-graft-points
příkazu mkisofs
. Ukážeme si na
příkladu kdy budeme chtít zazálohovat adresář /etc
,
/var
a /home
.
mkisofs -J -R -o backup_etc_var_home050425.iso \ -graft-points etc=/etc var=/var home=/home
Poznámka: pokud byste nepoužili volbu -graft-points
, tak
budete mít všechny
soubory a podadresáře z daných adresářů přímo v kořenovém adresáři na CD.
Vytvoření souborového systému na CD je snadné, nezapomeňte však na to, že
toto CD bude čitelné pouze v Linuxu, ostatní operační systémy s ním
nebudou umět pracovat (pokud nebudou mít podporu daného souborového systému). Nejprve si vytvoříme soubor o příslušné velikosti
a potom do něj nakopírujeme zvolená data. K vytvoření souboru nám poslouží
již dříve zmiňovaný program dd
.
dd if=/dev/zero of=filesystem.iso bs=1024k count=700
Teď již můžeme v tomto souboru vytvořit libovolný filesystém a to následovně:
mkfs.ext2 -b 2048 filesystem.iso
Varování o tom, že daný soubor není speciální blokové zařízení
můžeme ignorovat.
Takto vyvořený soubor s filesystémem následně připojíme do systému příkazem
mount
(pokud
to nemáme povoleno v /etc/fstab
- což asi nemáme, tak to musíme
připojit jako root
).
mount filesystem.iso /mnt -o loop
Do takto připojeného souborového systému už můžeme nakopírovat cokoliv, jsme limitováni pouze velikostí, která je v našem případě ~700MB. Posledním krokem je samotné vypálení takto vytvořeného systému a to si ukážeme níže.
Vytvoření bootovacího CD/DVD je jednoduché - stačí programu
mkisofs
předhodit
zaváděcí program - v našem případě to je soubor isolinux.bin
.
Následující příklad demonstruje jak se vytváří bootovací ISO image pro
distribuci Slackware current.
mkisofs -hide-rr-moved \ -v -d -no-emul-boot -boot-load-size 4 -boot-info-table \ -sort isolinux/iso.sort \ -b isolinux/isolinux.bin \ -c isolinux/isolinux.boot \ -A "Slackware Current DVD" \ -publisher "www.linuxsoft.cz" -o slackware.iso ./
Jednotlivé parametry výše uvedené ukázky pro vytvoření bootovacího ISO obrazu zde uvádět nebudu, protože jsou velice dobře popsané v manuálových stránkách.
Ještě před samotným vypalováním je dobré si ISO soubor zkontrolovat. V Linuxu to lze jednoduše tak, že jej připojíme přes zpětnovazební smyčku (loopback) a to následujícím způsobem.
mount backup.iso /mnt/hd -o loop
Toto mountování můžete provádět pouze jako uživatel root
.
Můžete si to
ale vhodně nastavit v souboru /etc/fstab
a pak si
ISO image přes loopback mountovat i jako obyčejný uživatel.
Po namountování už vám nic nebrání v tom udělat si zběžnou kontrolu adresářů
a souborů nebo důkladnou kontrolu pomocí programu md5sum
.
Další zběžnou kontrolu můžeme provést pomocí programu isoinfo
.
isoinfo -d -i backup.iso
Ještě před samotným vypalováním musíme provést detekci našeho vypalovacího
zařízení přes které budeme následně vypalovat. Toto se provádí, stejně
tak jako samotné vypalování, pomocí programu cdrecord
.
cdrecord -scanbus scsidev: 'ATA' devname: 'ATA' scsibus: -2 target: -2 lun: -2 Linux sg driver version: 3.5.27 Using libscg version 'schily-0.8'. scsibus1: 1,0,0 100) 'PLEXTOR ' 'DVDR PX-740A ' '1.01' Removable CD-ROM 1,1,0 101) 'SONY ' 'CD-RW CRX300E ' 'KYS2' Removable CD-ROM 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) * 1,6,0 106) * 1,7,0 107) *
Vypalování CD bude potom vypadat následovně:
cdrecord dev=ATA:1,0,0 -v -eject speed=24 driveropts=burnfree backup.iso
Pozor na to, že v některých distribucích Linuxu můžete některé parametry
(například výše uvedený driveropts=burnfree
) nastavit pouze
pod rootem.
Vypálení CD bez ukládání ISO image na disk.
mkisofs -R /etc | cdrecord -v speed=4 dev=1,0,0 -
Pokud pouze chcete otestovat vypalovací proces s vypnutým laserem, tak použijte parametr -dummy
.
cdrecord dev=ATA:1,0,0 -v -eject -gracetime=2 speed=24 driveropts=burnfree -dummy backup.iso
Pozor, i na tento test vypalování budete potřebovat prázdné médium v mechanice.
Pokud máte dvě mechaniky, tak určitě zatoužíte po přímém kopírování CD bez nutnosti ukládání dat na disk. I toto samozřejmě lze - například následujícím způsobem:
cdrecord -v dev=ATA:1,0,0 speed=4 driveropts=burnfree -isosize /dev/hdc
Vytváření "multisession" CD je stejné jako vytváření normálních CD akorát nesmíme zapomenout přidat při vypalování daných sekcí (pokud se nejedná již o poslední sekci) parametr -multi
(a případně přidat parametr -tao
), který programu
cdrecord
řekne, aby neuzavíral CD.
První sekci vytvoříme tedy tímto způsobem:
cdrecord dev=ATA:1,0,0 -v -eject -gracetime=2 speed=24 driveropts=burnfree -multi backup.iso
Pro vytvoření další sekce potřebujeme z CD získat informace o tom, kde první sekce začíná a kde končí a to provedeme následovně:
cdrecord dev=ATA:1,0,0 -msinfo
0,13066
Vytvoříme ISO obraz další sekce:
mkisofs -J -R -V "DruhaSekce" -o backup2.iso -C 0,13066 -M /dev/hdc /var
Pokud nepoužijete parametr -M /dev/hdc
(či
-M ATA:1,0,0
)
tak budou data rozdělena na více sekcí (používá se například pro uchování
audio dat v první sekci a normálních dat v druhé).
Takto vytvořený obraz opět vypálíme:
cdrecord dev=ATA:1,0,0 -v -eject -gracetime=2 speed=24 driveropts=burnfree -multi backup2.iso
Další postup se opakuje. Při vypalování poslední sekce vynecháme parametr
-multi
, aby došlo k uzavření CD.
Mazání přepisovatelných CD je jednoduché o čemž svědčí i následující příklad:
cdrecord blank=all
který provede úplné smazání CD. K dispozici je samozřejmě řada jiných způsobů mazání. Možnosti zjistíte následujícím způsobem:
cdrecord blank=help
Pokud vám připadá zdlouhavé psát pořád stejné parametry u příkazu cdrecord, tak
si samozřejmě některé parametry můžete uložit do konfiguračního souboru, který
se nachází (pokud ne, tak si jej vytvořte) v souboru
/etc/cdrecord.conf
(dříve
byl v souboru /etc/default/cdrecord.conf
).
Pro vypalování DVD se používá především program growisofs
nebo
cdrecord
s nadstavbou pro DVD. Vypalování pomocí
programu cdrecord
zde již nebudu uvádět, protože je
obdobné vypalování CD, které jsme si uvedli výše a pozorný čtenář
si jistě dokáže upravit případné parametry, navíc vyžaduje přítomnost
nadstavby pro vypalování DVD v programu cdrecord
.
Program growisofs
je velice jednoduchý a má pouze
pár parametrů. Pojďme tedy vyrobit nějaké DVD. Nejprve vypálením
již předpřipraveného obrazu, který můžeme vyrobit úplně stejným způsobem
jako CD. Pokud chcete na DVD ukládat větší soubory (o velikosti 1GB a více),
tak doporučuji použít nativní UDF filesystém, který toto podporuje.
growisofs -speed=4 -Z /dev/hda=backup.iso
Vypálení s vytvořením ISO filesystému "on-the-fly" bude vypadat následovně
growisofs -Z /dev/hda -J -R -graft-points etc=/etc var=/var home=/home
Je to triviální - pouze programu growisofs
předhodíme parametry
programu mkisofs
, který se zavolá jako první a vygenerované
ISO se předhodí pomocí interního programu dd
programu
growisofs
.
Vypalování "multisession" DVD je jednodušší než vypalování CD, protože
growisofs
je prakticky frontend
pro mkisofs
. Stačí místo
parametru -Z
příkazu growisofs
použít
pro další sekce parametr -M
, jak dokládá i následující příklad:
growisofs -speed=4 -Z /dev/hda -J -R -hide-rr-moved -graft-points etc=/etc
growisofs -speed=4 -M /dev/hda -J -R -hide-rr-moved -graft-points var=/var
Program growisofs
obvykle automaticky provede smazání. Program pro
mazání je součástí balíku dvd+rw-tools
, konkrétně se jedná
o program dvd+rw-format
.
Určitě z vás občas někdo narazil na problém moderních mechanik, které se snaží číst média příliš rychle i v případě, kdy je to zbytečné - například při přehrávání hudebního CD. Popíšu zde způsoby jak je možné snížit rychlost čtení mechaniky.
eject -x 4 /dev/hdc
hdparm -E 4 /dev/hdc
Když už jsem nakousnul příkaz eject
, tak bych měl
zmínit i jeho opačnou
funkci (tedy zasunutí mechaniky) a to pomocí:
eject -t
Zasunutí mechaniky se také provede automaticky při použití
příkazů mount
, dd
a dalších.
Pokud zálohujete data a chcete se ve vašich zálohách vyznat i v budoucnu,
tak si najděte čas i na kvalitní popisky samotných médií a také vytvoření
čitelného obalu daného média. Skvělým pomocníkem na vytváření obalů
je program cdlabelgen
I přes poměrně značnou délku článku se spousta věcí do tohoto dílu o Linuxu v příkazech již nevešla. Další parametry a možnosti výše zmíněných programů naleznete v manuálových stránkách jednotlivých programů. Protože jsem postihnul pouze vypalování dat a úplně jsem vynechal možnosti vypalování audio CD a video DVD, tak toto mohu v případě většího zájmu napravit v samostatném článku, který by se této problematice věnoval.