Příprava systému na klonování

Pavel 'TIGER' Růžička

Příprava systému na klonování
« kdy: 09. 04. 2013, 17:41:15 »
Jak nejlépe připravit disk na klonování na další disky, tak aby nebylo nutné bootovat do záchraného systému a opravovat grub2? Problém vidím v UUID a ID disku, nejlepší by bylo přejít asi na PATH, ale nějak se nemohu dočíst, jak ho Grubu2 vnutit. Pak možná bude asi problém i v initrd ...


Pavel 'TIGER' Růžička

Re:Příprava systému na klonování
« Odpověď #1 kdy: 10. 04. 2013, 11:27:55 »
Takže jsem vyzkoušel změnit fstab na path cestu: pci-0000:00:1f.2-scsi-0:0:0:0-part1 pochopitelně party správně přiřazené k oddílům. Dále jsem v /boot/grub2 změnil device.map na pci-0000:00:1f.2-scsi-0:0:0:0 tady pochopitelně bez partu. Nechal jsem vygenerovat nový initrd a nový grub.cfg a stejně při naklonování končím na hlášce:

Trying manual resume from /dev/sda1
resume device /dev/sda1 not found (ignoring)
Trying manual resume from /dev/sda1
resume device /dev/sda1 not found (ignoring)
Waiting  for device /dev/root to appear .................................... Could not find /dev/root.
Want me to fall back to /dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0-part2? (Y/n)

Klávesy Y/n pochopitelně nereagují.

Originál jede bez problému, jen te kopie se přes tohle nehne, tohle vlastně naběhne hned po grubu.

Mám velké podezření na grub.cfg, jelikož tam jsou UUID cesty k disku a i to /dev/sda1 je tam prapodivné. Nicméně všude jsem se dočetl, že grub2 se needituje, ale generuje ... tak jsem si netroufl do toho zasáhnout.

grub.cfg:

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  load_env
fi
set default="${saved_entry}"

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_msdos
insmod ext2
set root='hd0,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  8d84c8e4-e91e-4320-bcc1-38bd82913eb4
else
  search --no-floppy --fs-uuid --set=root 8d84c8e4-e91e-4320-bcc1-38bd82913eb4
fi
    font="/usr/share/grub2/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=POSIX
  insmod gettext
fi
terminal_output gfxterm
insmod part_msdos
insmod ext2
set root='hd0,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  8d84c8e4-e91e-4320-bcc1-38bd82913eb4
else
  search --no-floppy --fs-uuid --set=root 8d84c8e4-e91e-4320-bcc1-38bd82913eb4
fi
insmod gfxmenu
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans-Bold14.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans10.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans12.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/ascii.pf2
insmod png
set theme=($root)/boot/grub2/themes/openSUSE/theme.txt
export theme
if [ x${boot_once} = xtrue ]; then
  set timeout=0
elif sleep --interruptible 0 ; then
  set timeout=2
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE 12.3' --class 'opensuse-12-3' --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-8d84c8e4-e91e-4320-bcc1-38bd82913eb4' {
   load_video
   set gfxpayload=keep
   insmod gzio
   insmod part_msdos
   insmod ext2
   set root='hd0,msdos2'
   if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  8d84c8e4-e91e-4320-bcc1-38bd82913eb4
   else
     search --no-floppy --fs-uuid --set=root 8d84c8e4-e91e-4320-bcc1-38bd82913eb4
   fi
   echo   'Loading Linux 3.7.10-1.1-desktop ...'
   linux   /boot/vmlinuz-3.7.10-1.1-desktop root=UUID=8d84c8e4-e91e-4320-bcc1-38bd82913eb4   resume=/dev/sda1 splash=silent quiet showopts
   echo   'Loading initial ramdisk ...'
   initrd   /boot/initrd-3.7.10-1.1-desktop
}
submenu 'Advanced options for openSUSE 12.3' $menuentry_id_option 'gnulinux-advanced-8d84c8e4-e91e-4320-bcc1-38bd82913eb4' {
   menuentry 'openSUSE 12.3, with Linux 3.7.10-1.1-desktop' --class 'opensuse-12-3' --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.7.10-1.1-desktop-advanced-8d84c8e4-e91e-4320-bcc1-38bd82913eb4' {
      load_video
      set gfxpayload=keep
      insmod gzio
      insmod part_msdos
      insmod ext2
      set root='hd0,msdos2'
      if [ x$feature_platform_search_hint = xy ]; then
        search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  8d84c8e4-e91e-4320-bcc1-38bd82913eb4
      else
        search --no-floppy --fs-uuid --set=root 8d84c8e4-e91e-4320-bcc1-38bd82913eb4
      fi
      echo   'Loading Linux 3.7.10-1.1-desktop ...'
      linux   /boot/vmlinuz-3.7.10-1.1-desktop root=UUID=8d84c8e4-e91e-4320-bcc1-38bd82913eb4   resume=/dev/sda1 splash=silent quiet showopts
      echo   'Loading initial ramdisk ...'
      initrd   /boot/initrd-3.7.10-1.1-desktop
   }
   menuentry 'openSUSE 12.3, with Linux 3.7.10-1.1-desktop (recovery mode)' --class 'opensuse-12-3' --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.7.10-1.1-desktop-recovery-8d84c8e4-e91e-4320-bcc1-38bd82913eb4' {
      load_video
      set gfxpayload=keep
      insmod gzio
      insmod part_msdos
      insmod ext2
      set root='hd0,msdos2'
      if [ x$feature_platform_search_hint = xy ]; then
        search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2 --hint='hd0,msdos2'  8d84c8e4-e91e-4320-bcc1-38bd82913eb4
      else
        search --no-floppy --fs-uuid --set=root 8d84c8e4-e91e-4320-bcc1-38bd82913eb4
      fi
      echo   'Loading Linux 3.7.10-1.1-desktop ...'
      linux   /boot/vmlinuz-3.7.10-1.1-desktop root=UUID=8d84c8e4-e91e-4320-bcc1-38bd82913eb4  showopts apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset  x11failsafe
      echo   'Loading initial ramdisk ...'
      initrd   /boot/initrd-3.7.10-1.1-desktop
   }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###

Tak a co s tím? Chci jen naklonovat identický a funkční stroj, abych nemusel po klonování nic upravovat. Ovšem tento úkol se zdá být naprosto nemožný.

Zopper

  • *****
  • 920
    • Zobrazit profil
Re:Příprava systému na klonování
« Odpověď #2 kdy: 10. 04. 2013, 16:25:18 »
No, vykašlat se na nějaké pci a uuid... a použít klasické /dev/sda1, sda2, ... a pak dd if=/dev/sda of=/dev/sdb.

Pokud je v tom systému při startu jediný disk, tak to bude takto fungovat vždycky. Pokud je tam disků víc, pak záleží na tom, jaká dostanou jména (pořadí v jakém je připojí bios). Alternativou pak je použít label, ten by to vyřešil, ale nemám zkušenost jak to bere grub.

Pavel 'TIGER' Růžička

Re:Příprava systému na klonování
« Odpověď #3 kdy: 10. 04. 2013, 17:59:39 »
No, vykašlat se na nějaké pci a uuid... a použít klasické /dev/sda1, sda2, ... a pak dd if=/dev/sda of=/dev/sdb.

Pokud je v tom systému při startu jediný disk, tak to bude takto fungovat vždycky. Pokud je tam disků víc, pak záleží na tom, jaká dostanou jména (pořadí v jakém je připojí bios). Alternativou pak je použít label, ten by to vyřešil, ale nemám zkušenost jak to bere grub.

No fajn a jak mám upravit ten grub.cfg, aby tam neměl ty šílenosti a  akceptoval klasiku /dev/sdx? Zkoušel jsem to různě, ale nějak jsem nepochodil. V duchu si říkám, co komu vadilo na původním grubu? Tohle je fakt šílenost, jen dva dny pročítám různé manuály a něco tak primitivního jako je klon systému prostě nefunguje. Hlavně, že máme Linuxové nástroje, které bezproblémově klonují Windows, ale chceme li naklonovat Linux, musíme číst tuny materiálu ...

Zopper

  • *****
  • 920
    • Zobrazit profil
Re:Příprava systému na klonování
« Odpověď #4 kdy: 10. 04. 2013, 19:30:14 »
Právě že nijak. ;-)
Jediná manuální úprava je ve fstab. Pak stačí jen přegenerovat initramfs a konfiguraci grubu (v debianu update-initramfs -u && update-grub, v archlinuxu mkinitcpio -p linux && grub-mkconfig -o /boot/grub/grub.cfg) a naklonovat celý disk přes dd. Systém přežije i pokud budeš klonovat přímo v živém systému, právě otestováno ve virtualboxu na debianu.

Samozřejmě, pokud máš LVM, LUKS, či jiné serepetičky, tak musíš upravit i ty, ale jinak problém není... Já nový systém instaluju jen výjimečně, obvykle klonuju už existující.


Pavel 'TIGER' Růžička

Re:Příprava systému na klonování
« Odpověď #5 kdy: 10. 04. 2013, 19:52:33 »
Právě že nijak. ;-)
Jediná manuální úprava je ve fstab. Pak stačí jen přegenerovat initramfs a konfiguraci grubu (v debianu update-initramfs -u && update-grub, v archlinuxu mkinitcpio -p linux && grub-mkconfig -o /boot/grub/grub.cfg) a naklonovat celý disk přes dd. Systém přežije i pokud budeš klonovat přímo v živém systému, právě otestováno ve virtualboxu na debianu.

Samozřejmě, pokud máš LVM, LUKS, či jiné serepetičky, tak musíš upravit i ty, ale jinak problém není... Já nový systém instaluju jen výjimečně, obvykle klonuju už existující.

Tak to jdu schválně zkusit. Mám openSUSE, ale podobnost snad dohledám. Nicméně nezkoušel si klonovat i přes clonezillu?

Zopper

  • *****
  • 920
    • Zobrazit profil
Re:Příprava systému na klonování
« Odpověď #6 kdy: 10. 04. 2013, 20:27:06 »
Nezkoušel. Jen výjimečně to klonuju na menší disk a pak to řeším stylem "vytvořit oddíly, rsync dat, chroot, reinstalace grubu".

Pavel 'TIGER' Růžička

Re:Příprava systému na klonování
« Odpověď #7 kdy: 10. 04. 2013, 21:00:46 »
Hm, tak stejně to u mne nezabralo, přepsal jsem oddíly na sdax, spustil mkinitrd a grub-install a výsledek je stejný. Hele, když přepíšeš fstab na klasiku a spustíš ten initramfs s uptadem grubu, jak potom vypadá onen grub.cfg, jsou tam ty šílenosti UUID atp? Mne zaráží, že když změním způsob z id na uuid, či path, tak v grub.cfg je pořád jen to uuid a způsob v něm se nemění ... chápal bych, že když to změním v fstab a nechám to přegenerovat pro grub, že by se to mělo změnit i tam ... ale to se neděje. Je to správně, či nikoliv?

pavel

Re:Příprava systému na klonování
« Odpověď #8 kdy: 10. 04. 2013, 21:07:27 »
Klonoval jsem systém z staršího notebooku na novější (stejný výrobce a typ, jen novější verze notebooku). Taky jsem se obával UUID.

Takže jsem si vytvořil diskové oddíly, změnil jejich UUID tak, aby byly stejné jako na starém disku, nakopíroval soubory, smazal /etc/udev/rules.d/70-persistent-net.rules a /etc/udev/rules.d/70-persistent-cd.rules, reboot, pomocí instalačního DVD jsem obnovil Grub (systémem klik-klik-obnovit Grub), hotovo (Debian Sqeeze).

Před 14 dny jsem dělal to samé, ale jiným způsobem - vytvořil diskové oddíly, obnovil předtím zazálohované diskové oddíy pomocí fsarchiver (ten zálohuje i UUID), smazal /etc/udev/rules.d/70-persistent-net.rules a /etc/udev/rules.d/70-persistent-cd.rules, reboot, pomocí instalačního DVD jsem obnovil Grub (systémem klik-klik-obnovit Grub), hotovo (CentOS 6).

Zopper

  • *****
  • 920
    • Zobrazit profil
Re:Příprava systému na klonování
« Odpověď #9 kdy: 10. 04. 2013, 21:10:35 »
Pak by mělo pomoct tohle (v /etc/default/grub) :-)

Kód: [Vybrat]
# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
GRUB_DISABLE_LINUX_UUID=true

Zopper

  • *****
  • 920
    • Zobrazit profil
Re:Příprava systému na klonování
« Odpověď #10 kdy: 10. 04. 2013, 21:17:35 »
Ještě to vysvětlím - ta úprava fstabu se týká s ohledem na grub jen toho, jaký oddíl je kam připojený, neřeší styl identifikace. Tzn fstab je potřeba upravit pro připojení oddílů po startu a hlavně pro initramfs, který by jinak skončil na tom, že nemůže najít root. Pro grub je rozhodující ta volba v nastavení, zapomněl jsem na ni. :)

Pavel 'TIGER' Růžička

Re:Příprava systému na klonování
« Odpověď #11 kdy: 10. 04. 2013, 21:51:26 »
Klonoval jsem systém z staršího notebooku na novější (stejný výrobce a typ, jen novější verze notebooku). Taky jsem se obával UUID.

Takže jsem si vytvořil diskové oddíly, změnil jejich UUID tak, aby byly stejné jako na starém disku, nakopíroval soubory, smazal /etc/udev/rules.d/70-persistent-net.rules a /etc/udev/rules.d/70-persistent-cd.rules, reboot, pomocí instalačního DVD jsem obnovil Grub (systémem klik-klik-obnovit Grub), hotovo (Debian Sqeeze).

Před 14 dny jsem dělal to samé, ale jiným způsobem - vytvořil diskové oddíly, obnovil předtím zazálohované diskové oddíy pomocí fsarchiver (ten zálohuje i UUID), smazal /etc/udev/rules.d/70-persistent-net.rules a /etc/udev/rules.d/70-persistent-cd.rules, reboot, pomocí instalačního DVD jsem obnovil Grub (systémem klik-klik-obnovit Grub), hotovo (CentOS 6).

Tak tomuto bych se rád vyhnul, přeci jen to budu kopírovat na nějakých třicet strojů. U jednoho bych si poradil a nezakládal toto vlákno, ale většího množství už  to otravuje.

Pavel 'TIGER' Růžička

Re:Příprava systému na klonování
« Odpověď #12 kdy: 10. 04. 2013, 21:56:21 »
Ještě to vysvětlím - ta úprava fstabu se týká s ohledem na grub jen toho, jaký oddíl je kam připojený, neřeší styl identifikace. Tzn fstab je potřeba upravit pro připojení oddílů po startu a hlavně pro initramfs, který by jinak skončil na tom, že nemůže najít root. Pro grub je rozhodující ta volba v nastavení, zapomněl jsem na ni. :)

Tak tohle už vypadá velmi zajímavě, ale řeknu Ti, Grub2 je celkem šílenej ... rozházené je to po celém systému, nějak se nám vytratila ta jednoduchost. :-/ dříve většinou stačilo sáhnout do menu.lst a vyřešilo se vše. Inu pokrok ...

Zopper

  • *****
  • 920
    • Zobrazit profil
Re:Příprava systému na klonování
« Odpověď #13 kdy: 10. 04. 2013, 22:46:14 »
Jo, taky mi přijde, že grub2 to zbytečně komplikuje. Chápu, že asi s příchodem (U)EFI, vývojem požadavků a tak, mohlo být nejlepším řešením "zpátky na stromy a znovu a jinak", ale řekl bych, že se to chytilo za špatný konec.

Pavel 'TIGER' Růžička

Re:Příprava systému na klonování
« Odpověď #14 kdy: 10. 04. 2013, 23:43:24 »
Jo, přesně tak nějak to vidím ... po stránce, co to umí, to je asi dobré, ale zpracování už tak dobré není. /// Tak jsem to odkomentoval, ale problém bude asi v initrd i když pořád podezírám Grub2. Opensuse nepoužívá initramfs, ale initrd. A při vytváření nevypadá, že by bylo něco špatně. Nechám to teď rozležet v hlavě. Tak pořád to mohu naklonovat a pak chodit s opravním CD, ale u třiceti strojů, to mne fakt neláká ... Pro jistotu jsem napsal i na forum openSUSE.