A maior parte da solução (abaixo) vem de este ótimo artigo que chega perto de funcionar, mas não completamente, já que precisa de algumas atualizações em alguns lugares. Mas sugiro que você olhe para ele, pois é mais completo na explicação dos passos.
Isto é para o meu laptop baseado em BIOS. Eu estou supondo que isso pode não funcionar para uma máquina de inicialização EUFI.
DICAS:
-
Não faça o arquivo de configuração do grub como o artigo acima sugere, mas sim como mostro abaixo.
-
Quando você finalmente trabalhar abaixo, verá que, com o tempo, o sistema de arquivos ficará cheio inesperadamente. Eu finalmente descobri que isso ocorre porque o Ubuntu está silenciosamente fazendo
apt-get update
e isso irá preencher todo o seu espaço no arquivo e, em seguida, você receberá uma mensagem de aviso. (Demorei alguns anos para descobrir o que estava acontecendo.)
A correção inicial era fazer apt-get clean
para despejar o cache do apt, mas isso realmente não resolve o problema subjacente. Então eu tentei simplesmente desabilitar o wi-fi para que ele não fizesse uma atualização automática. Isso funciona muito bem para mim! Agora minhas varas duram muito tempo sem problemas.
Etapas cuidadosamente testadas para funcionar:
1. Faça o download da imagem ISO do Ubuntu 16.04 aqui .
2. setar algumas variáveis para usar abaixo:
iso=/path/to/isoimage #e.g. iso=~/Downloads/ubuntu-16.04-desktop-amd64.iso s=/mnt/isoimage #Source mount point for ISO files (via loop file system) t=/media/USBRoot #Target mount point for USB files in partition #1
!! Next, BE VERY CAREFUL to correctly point to the USB stick, and not to your hard drive, with this next step, as you can accidentally overwrite your hard disk. (Tip: lookup and confirm using
lsblk
or the like)dev=/dev/sd? #set the "?" to your USB drive letter, e.g. /dev/sdb
3. Plugin e, opcionalmente, apagar Se o particionamento falhar abaixo do apagamento é recomendado. (Antes, quando eu tinha dd'ed uma imagem iso para o dispositivo usb, eu tive que zerar antes que eu pudesse fazer o fdisk funcionar corretamente novamente.).
sudo dd if=/dev/zero of=$dev #bs=2048 is optional and doesn't seem to matter
You'll get a message like this when it's done:
dd: writing to ‘/dev/sdb’: No space left on device 30326785+0 records in 30326784+0 records out 15527313408 bytes (16 GB) copied, 4099.2 s, 3.8 MB/s
The erase step is because I've found that sometimes a quick format won't work. I don't know for sure, but I suspect that 2nd copies of the partition map, or the like are being found and are confusing the partitioning software. So writing all zeros to the USB stick before we begin seems to make sure that you're starting fresh. But, and yes, I know, it takes LONG time to complete.
4. Faça partições. Use uma ferramenta de particionamento para colocar um mapa de partição do tipo msdos no pendrive e particione-o em duas partições da seguinte forma:
Partition 1) VFAT32 partition for the kernel, ramdisk, grub, and persistence via casper-rw file. Use all of the remaining space for this.
Partition 2) bootable partition for the linux iso image. Make it about 2G in size (because that's how big the .iso file is).
The size of the #2 partition needs to be about 2g, so subtract this from the size of the drive and then divide by 512 to get the size of the #1 partition in sectors. In my case that's 16gb - 2gb = 14gb / 512 = about 27343750 sectors.
Tip: unmount the device now if it is mounted or you will get an error when you are done with fdisk. Don't use the graphical unmount button, as it seems to make the device un-findable (until the USB drive is unplugged and then replugged back in), rather use the terminal command as follows:
Pergunta: Não sei por que essas partições não podem ser trocadas, com a partição de inicialização como a primeira partição. Mas pelo que vale a pena, tentei isso e não consegui fazê-lo funcionar.
sudo umount ${dev}1 sudo umount ${dev}2
Here's how: You can use either fdisk, parted, gparted, or cfdisk but I like fdisk.
sudo fdisk $dev o [create partition map], and then n (p) (1) (2048) 27343750 [new partition #1] t c [change partition type to type c, or W95 FAT32], and n (p) (2) (default) (default) [new partition #2] t 2 83 [type 83 or linux], then a (2) [set [toggle] the bootable flag], and p [check new table], and finally
It should look something like this:
Disk /dev/sdb: 14.5 GiB, 15527313408 bytes, 30326784 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xa42995f9 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 27343750 27341703 13G c W95 FAT32 (LBA) /dev/sdb2 * 27344896 30326783 2981888 1.4G 83 Linux
Then do this:
w [write the partition table to the usb drive]
You should get a response like this:
The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
or if you forgot to unmount it first then you will get this:
The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Device or resource busy The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
In which case you simply go back, unmount it as described above, and then run fdisk again and only hit w, and you're done.
5. Escreva a imagem iso para a segunda partição. Lutei para incluir um parâmetro de tamanho de bloco ou não aqui (por exemplo, bs = 2048), e no final parece que não importa ou tem pouco efeito. Observe também que essa partição não precisa ser formatada, já que a ISO a formatará efetivamente quando copiada diretamente para a partição.
sudo dd if=$iso of=${dev}2
6. Formatar a primeira partição. Note que ele formata isso com o VFAT32 (ou seja, a versão de nomes de arquivo longos do FAT32). Eu estou supondo que isso é para facilitar a leitura dessa partição em qualquer máquina (ou seja, portabilidade). [Pretendo ver se o ext3 também pode funcionar e atualizará isso mais tarde com esse teste].
sudo mkfs.vfat -F 32 -c ${dev}1 # for vFAT32 file system
7. Monte a partição 1 para poder instalar arquivos nela.
sudo mkdir -p $t sudo mount ${dev}1 $t
8. Instale o grub no primeiro setor do stick usb e no diretório raiz na partição # 1.
sudo grub-install --no-floppy --root-directory=$t $dev
9. Copie o kernel e ram arquivos de disco. (NOTA, isso é revisado a partir do artigo. O kernel agora vem como uma versão * .efi, (mas ainda é apenas um kernel), e initrd (o disco ram com todos dos pacotes) é agora comprimido com lz em vez de gz). Primeiro, montamos o arquivo de imagem (como um dispositivo de loop), onde obteremos esses dois arquivos de:
sudo mkdir -p $s sudo mount -o loop $iso $s sudo cp $s/casper/{vmlinuz.efi,initrd.lz} $t/boot/
10. Crie um arquivo para manter o sistema de arquivos persistente. Ajuste o tamanho, se desejar. Isso é definido como 1024x1mb = 1gb. Note que dentro do arquivo casper-rw é um sistema de arquivos ext3. O nome casper-rw é mágico, então não o mude.
sudo dd if=/dev/zero of=$t/casper-rw bs=1M count=1024 sudo mkfs.ext3 -F $t/casper-rw #takes a long time
11. Crie um arquivo de configuração simples do grub. Certifique-se de dar a ele uma extensão de nome de arquivo conf (possivelmente mais nova?) Cfg não conf para que o grub possa encontrá-lo (ref ). Use seu editor favorito ou use:
sudo nano $t/boot/grub/grub.cfg
12. Cole os seguintes comandos do grub em.
*Notes: you can use echo and read here for more debugging if necessary. Also the "ro" "splash" and "quiet" are optional (but suggested) kernel options with mostly self explanatory behaviors. See this quite helpful post on how to use the GRUB> prompt if necessary. I'm guessing that he had a .conf file because this might have been for GRUB 1.0, rather than GRUB 2.0, and this might also explain the commands he had not working. Also note that the root is partition 1 (i.e. msdos1).
echo LOADING USB DRIVE echo echo To continue press any key echo To abort press ^-alt-delete echo read echo Proceeding... set default=0 set timeout=10 set title="Ubuntu (Live)" set root=(hd0,msdos1) linux /boot/vmlinuz.efi boot=casper file=/preseed/ubuntu.seed persistent ro splash quiet echo vmlinuz.efi loaded initrd /boot/initrd.lz echo initrd.lz loaded echo echo Grub done. Booting... boot
13. sincronização (recomendado) e limpeza (opcional):
sync sudo umount $s; sudo rmdir $s sudo umount $t; sudo rmdir $t
14. Faça o backup de sua nova unidade USB.
dd if=$dev of=/your/backup/location #takes a long time
To later restore it use the reverse:
dd if=/your/backup/location of=$dev #takes a long time
15. Reinicie e aperte uma tecla para inicializar o pendrive do Ubuntu.
16. Adicione seu script de backup a ele. Aqui está meu script incremental que lida com dois laptops. PRIMEIRO VERIFIQUE-O CUIDADOSAMENTE PARA SEU SISTEMA E AJUSTE-O COMO NECESSÁRIO. Nomeie-o como mybackup e vincule myrestore a ele ( ln mybackup myrestore
). Definir permissões de execução com chmod u+x my{backup,restore}
. Execute-o com ./mybackup
#!/bin/bash #Usage: # # mybackup - show list of current backups # myrestore - '' # # mybackup <machine> <BackupFolderName> - machine: love2d or sharon-pc # myrestore <machine> <BackupFolderName> - by convention name is 'nn-descriptiveName' (so it sorts by date) ################################################################# ################################################################# ### PARTITIONS ###################### #Partition labels (also used for mount point folder names): # Note: use labels rather than UUID as they might be more controllable. BackupDrive='Linux backup' # USB backup drive (I removed space from 'name' & it removed it from 'label') BackupBase="$BackupDrive/Backups" # Backup base folder directory & name SubDir="files" ### PARTITIONS LABEL HELP: #lsblk -o +label gives (note older method was blkid, but this suggests we use lsblk): #NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT LABEL #sda 8:0 0 465.8G 0 disk #├─sda1 8:1 0 199M 0 part SYSTEM #├─sda2 8:2 0 288.1G 0 part #├─sda3 8:3 0 1K 0 part #├─sda4 8:4 0 29.3G 0 part Shared #├─sda5 8:5 0 23.3G 0 part d8root #├─sda6 8:6 0 119.5G 0 part d8home #└─sda7 8:7 0 5.4G 0 part [SWAP] #sdc 8:32 0 3.7T 0 disk #├─sdc1 8:33 0 128M 0 part #├─sdc2 8:34 0 2.7T 0 part /media/ubuntu/Seagate Backup Plus Drive Seagate Backup Plus Drive #└─sdc3 8:35 0 976.6G 0 part Linux backup ### MOUNTING 1of2 ###################### sudo umount "/mnt/$BackupDrive">& /dev/null # --- cleanup from prior failed attempt: sudo mkdir "/mnt/$BackupDrive">& /dev/null; sudo mount -L "$BackupDrive" "/mnt/$BackupDrive" -o defaults,suid >& /dev/null #Allow to set user owner of files ######################################################################## ### FUNCTIONS ################################################################# #################### function usage { echo; echo "Usage: ${0##*/} [machine name: Love2d|Sharon-pc] [BackupFolderName]";echo;} #################### #################### #If parameter just show dirs for that machine, else show for both function myls { echo -n "'$1' existing backups:" if [ -d "$2" ]; then echo; ls -lFgG "$2" |grep -v ^total |grep ' [0-9][0-9]-' |sed 's/..................//'; else echo ' (none)'; fi; } ################## function currentbackups { if [ "$1" ]; then myls "$1" "/mnt/$BackupBase/$1/$SubDir" else myls 'Love2d' "/mnt/$BackupBase/Love2d/$SubDir" echo myls 'Sharon-pc' "/mnt/$BackupBase/Sharon-pc/$SubDir" echo fi } ################### function badmachine { echo "Machine type '$1' is invalid.";} ################### function cleanup { # echo "--- cleaning up --------------------------------------" sudo umount "/mnt/$BackupDrive" } ######################################################################## ######################################################################## ### CHECK INPUTS ####################################################### #Check if backup name paramter exists: if [ $# = 0 ]; then usage; cleanup; exit; fi if [ $# = 1 ]; then if [ "$1" != "Love2d" -a "$1" != "Sharon-pc" ]; then badmachine "$1"; usage; else usage; currentbackups "$1"; fi; cleanup; exit; fi if [ $# = 2 ]; then if [ "$1" != "Love2d" -a "$1" != "Sharon-pc" ]; then badmachine "$1"; usage; cleanup; exit; fi; fi ### MOUNTING 2of2 ###################### if [ "$1" = 'Love2d' ]; then MyHome='d8home' # Love2 Debian /home partition name MyRoot='d8root' # Love2 Debian / (root) partition name MyShared='Shared' # Love2 Debian Shared partition name sudo umount "/mnt/$MyRoot" >& /dev/null # --- cleanup from prior failed attempt: sudo umount "/mnt/$MyHome" >& /dev/null # sudo umount "/mnt/$MyShared" >& /dev/null # sudo mkdir "/mnt/$MyRoot" >& /dev/null; sudo mount -L "$MyRoot" "/mnt/$MyRoot" >& /dev/null sudo mkdir "/mnt/$MyHome" >& /dev/null; sudo mount -L "$MyHome" "/mnt/$MyHome" >& /dev/null sudo mkdir "/mnt/$MyShared" >& /dev/null; sudo mount -L "$MyShared" "/mnt/$MyShared" >& /dev/null else # MyHome='uhome' # Love2 Ubuntu /home partition name # MyRoot='uroot' # Love2 Ubuntu / (root) partition name MyHome='a41eaa3e-bd31-4ebc-86d4-cf8ed5f3e779' # Love2 Ubuntu /home partition name MyRoot='f3b7424c-0144-42a6-8488-62fbee94d245' # Love2 Ubuntu / (root) partition name sudo umount "/mnt/$MyRoot" >& /dev/null # --- cleanup from prior failed attempt: sudo umount "/mnt/$MyHome" >& /dev/null # #sudo mkdir "/mnt/$MyRoot" >& /dev/null; sudo mount -L "$MyRoot" "/mnt/$MyRoot" >& /dev/null #sudo mkdir "/mnt/$MyHome" >& /dev/null; sudo mount -L "$MyHome" "/mnt/$MyHome" >& /dev/null sudo mkdir "/mnt/$MyRoot" >& /dev/null; sudo mount -U "$MyRoot" "/mnt/$MyRoot" >& /dev/null sudo mkdir "/mnt/$MyHome" >& /dev/null; sudo mount -U "$MyHome" "/mnt/$MyHome" >& /dev/null fi #================================================================= BackupDir="$BackupBase/$1/$SubDir/$2" # /dir/BackupFolderName #rSync stuff: MyRsync="sudo rsync -aAXv --delete" RootExclude=" --exclude={\"/dev/*\",\"/lost+found\",\"/media/*\",\"/mnt/*\",\"/proc/*\",\"/run/*\",\"/sys/*\",\"/tmp/*\"}" HomeExclude=" --exclude='*cache*'" #this does not work if [ "${0##*/}" = "mybackup" ]; then echo backing up... sudo mkdir -p "/mnt/$BackupDir/root" # Making directories to save backup to sudo mkdir -p "/mnt/$BackupDir/home" echo "--- Backing up: / -----------------------------------" $MyRsync $RootExclude "/mnt/$MyRoot/" "/mnt/$BackupDir/root/" echo "--- Backing up: /home -------------------------------" $MyRsync $HomeExclude "/mnt/$MyHome/" "/mnt/$BackupDir/home/" if [ "$MyShared" ]; then #no shared partion on Sharon's machine sudo mkdir -p "/mnt/$BackupDir/shared" echo "--- Backing up: Shared ------------------------------" $MyRsync "/mnt/$MyShared/" "/mnt/$BackupDir/shared/" fi else # Confirm read -p "YOU ARE ABOUT TO OVERWRITE YOUR PARTITIONS - CONFIRM (y/N)?" -n 1 -r; echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Aborting.";exit; fi echo; read -p "DANGER! Really overwrite your hard disk partitions? (y/N)?" -n 1 -r; echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Aborting.";exit; fi echo "--- Restoring: / -----------------------------------" $MyRsync "/mnt/$BackupDir/root/" "/mnt/$MyRoot" echo "--- Restoring: /home -------------------------------" $MyRsync "/mnt/$BackupDir/home/" "/mnt/$MyHome" if [ "$MyShared" ]; then #no shared partion on Sharon's machine echo "--- Restoring: Shared ------------------------------" $MyRsync "/mnt/$BackupDir/shared/" "/mnt/$MyShared" fi fi cleanup sudo umount "/mnt/$MyRoot" ;sudo rmdir "/mnt/$MyRoot" sudo umount "/mnt/$MyHome" ;sudo rmdir "/mnt/$MyHome" if [ "$MyShared" ]; then #no shared partion on Sharon's machine sudo umount "/mnt/$MyShared" ;sudo rmdir "/mnt/$MyShared" fi echo "=== DONE. ============================================" exit 0