Come clonare il filesystem btrfs in diversi supporti preservando i dati di condivisione delle istantanee


9

Ho deciso di provare le funzionalità raid di btrfs. Ho creato un btrfs con

sudo mkfs.btrfs -m raid10 -d raid10 /dev/sda9 /dev/sdb9 /dev/sdc9 /dev/sdd9

Ora voglio clonare la mia partizione btrfs esistente (che si trova in cima a Linux-Raid). non posso usare un semplice cp -a, perché ci sono oltre 40 backup basati su snapshot (che desidero conservare), e riempirei troppo tutto lo spazio di archiviazione che posso risparmiare più volte.

Finora posso vedere due opzioni:

partclone.btrfs -s /path/to/original/fs -o /dev/sda9 -b

e suppongo che dovrei farlo anch'io btrfs balance start /dev/sda9

e

do: copia incrementale con cp -ala quantità necessaria per l'archiviazione, quindi utilizza bedupper de-duplicare i file e esegui il ciclo.

Qual è il metodo preferito (ovvero la migliore pratica)? Preferirei di gran lunga il primo; dovrebbe richiedere molto meno tempo. O forse c'è qualche "gotcha" malvagio in agguato in una qualsiasi di queste procedure (oltre al fatto che btrfs è sperimentale, ovviamente)


La prima domanda è semplicemente fuori discussione; per quanto meraviglioso sia lo strumento partclone.btrfs, ovviamente non supporta file system multi-dispositivo. :-(

Risposte:


7

Ho fatto una domanda simile 2 anni fa.

Comunque nel mio caso, stavo solo pianificando di copiare un singolo dispositivo su raid0.

Alla fine ho trovato una soluzione . Al momento non è possibile convertire da raid0 a raid10, ma sembra che dal kernel 3.3, ora puoi farlo. Quindi quella soluzione potrebbe funzionare per te alla fine.

Un problema con questo approccio è che copia il fsuid. Ciò significa che non è possibile montare sia la FS che la sua copia sulla stessa macchina. Al momento, non esisteva uno strumento per modificare il valore fsuiddi un FS, ma ora potrebbe essere cambiato.

L'idea è quella di aggiungere un livello di copia su scrittura sopra il dispositivo originale in modo che possa essere scritto, ma qualsiasi modifica viene apportata da qualche altra parte che è possibile eliminare in seguito. Ciò significa che è necessario ulteriore spazio di archiviazione (ad esempio su un'unità esterna).

Quindi montare quel FS COW anziché l'originale, aggiungere i dispositivi per la copia FS e rimuovere il dispositivo COW.

Per la copia su scrittura, è possibile utilizzare il mapper del dispositivo.

Per la copia usa e getta nell'area di scrittura, qui uso un dispositivo loop.

Diciamo che vuoi clonare /dev/sdasu /dev/sd[bcde]:

Creare il back store COW:

truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store

Ora smonta l'origine FS se montato e modprobe -r btrfsper assicurarti che non interferisca e dimentica la scansione del dispositivo.

Quindi crea il dispositivo COW:

echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed

Ora /dev/mapper/cowedè come /dev/sdase non fosse tutto ciò che vi è scritto finirà /dev/loop0e /dev/sdanon sarà toccato.

Ora puoi montarlo:

mount /dev/mapper/cowed /mnt

Aggiungi gli altri dispositivi:

btrfs dev add /dev/sd[bcde] /mnt

E rimuovi quello vecchio:

btrfs dev del /dev/mapper/cowed /mnt

Quando è finito, potresti voler spegnere e scollegare o effettuare di /dev/sdasola lettura perché, poiché ha lo stesso liquido degli altri, btrfspotrebbe comunque rovinarlo.

Ora, se ho capito bene, supponendo che tu abbia recente btrfs-prog, dovresti essere in grado di fare un:

btrfs balance start -d convert=raid10 /mnt

Per convertire in raid10. In teoria, ciò dovrebbe assicurarsi che ogni blocco di dati sia copiato su almeno 2 dischi.

Consiglio vivamente di fare dei test su un btrfs fittizio su dispositivi loop prima come tutto ciò che viene dalla memoria e potrei essermi sbagliato (vedi ad esempio la mia risposta iniziale prima della mia modifica).

Si noti che dal kernel 3.6, btrfs implementa un comando di invio / ricezione un po 'come in zfs. Potrebbe essere un'opzione per te.


Ottima risposta, grazie. Lo proverò. Ora sto sperimentando l'invio / la ricezione.
Adam Ryczkowski,

@ Stéphane Chazelas I collegamenti gmane sono morti (probabilmente per sempre). Potresti adattare la tua risposta?
Jonas Stein,

4

L'idea di Stephane può essere fatta attraverso gli strumenti integrati di btrfs (ecco perché è bello): rendere il vecchio btrfs un dispositivo seed tramite btrfstune -S 1 /dev/device, aggiungere dispositivi, rimuovere il dispositivo seed, fare btrfs balance start. Un dispositivo seed è un dispositivo di sola lettura che può far parte di un file system scrivibile.


1

Ho provato a seguire il suggerimento di @ ignis di usare il seeding ma ho avuto problemi con esso; il sistema ha generato un errore durante il tentativo di rimuovere il dispositivo seed e non sono riuscito a superarlo. Poi ho scoperto che c'è (ora - btrfs-progs v3.19-64-g19a806f, forse non prima) il comando:

  btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>

che ha reso la clonazione del mio filesystem btrfs esistente (che era in un volume logico LVM) su una nuova partizione un gioco da ragazzi. Si noti che a maggio 2015 non funziona per i profili RAID5 / 6 - controllare la pagina man per informazioni complete.


1
Non utilizzare mai a scopo btrfs replace startdi backup !! Danneggia l'albero dei dispositivi e rende l'unità non montabile! Mi è stato impossibile recuperare dagli errori, quindi ho ripristinato una copia dell'immagine da un altro dispositivo a blocchi con il dd -tool. Utilizzare solo btrfs replaceper la migrazione dell'unità finale.
Karmus,

0

Opzione 1: copia dei dati, quindi modifica dell'UUID

Assicurarsi che la partizione di origine sia smontata e non verrà montata automaticamente.

Usa dd(lento, muto) opartclone.btrfs -b -s /dev/src -o /dev/target

Utilizzare btrfstune -uper modificare l'UUID dopo la copia e prima del montaggio.

Avviso perdita di dati : Do NON tentare di (auto) montare sia originale o copia fino a quando l'UUID è cambiato


Opzione 2 - btrfs-clone

Non ho provato personalmente btrfs-clone, ma pretende di clonare un file system BTRFS esistente su uno nuovo, clonando ogni sottovolume in ordine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.