De snapshot-functie van het Btrfs-bestandssysteem maakt gebruik van het Copy-on-Write (CoW)-principe. Het neemt dus niet veel schijfruimte in beslag en u kunt direct snapshots maken van een subvolume.
Het Btrfs-bestandssysteem ondersteunt 2 soorten snapshots.
- Beschrijfbare momentopnamen: Als u een beschrijfbare momentopname maakt, kunt u de bestanden/mappen van die momentopname later wijzigen. Dit is het standaard snapshot-type van het Btrfs-bestandssysteem.
- Alleen-lezen snapshots: Als u een alleen-lezen momentopname maakt, kunt u de bestanden/mappen van die momentopname later niet meer wijzigen.
Dit artikel laat u zien hoe u beschrijfbare en alleen-lezen snapshots kunt maken van uw Btrfs-bestandssysteemsubvolumes. Ik zal je ook laten zien hoe je een beschrijfbare momentopname kunt bijwerken en bestanden kunt herstellen van een momentopname. Ik zal je ook laten zien hoe je een momentopname verwijdert. Dus laten we beginnen.
Vereisten
Om de voorbeelden van dit artikel uit te proberen,
- U moet het Btrfs-bestandssysteem op uw computer hebben geïnstalleerd.
- U moet een harde schijf of SSD hebben met minimaal 1 vrije partitie (van elke grootte).
Ik heb een harde schijf van 20 GB sdb op mijn Ubuntu-machine. Ik heb 2 partities gemaakt sdb1 en sdb2 op deze harde schijf. Ik zal de partitie gebruiken sdb1 in dit artikel.
$ sudo lsblk -e7
Uw harde schijf of SSD heeft mogelijk een andere naam dan de mijne, net als de partities. Dus zorg ervoor dat je ze vanaf nu vervangt door die van jou.
Als je hulp nodig hebt bij het installeren van het Btrfs-bestandssysteem op Ubuntu, bekijk dan mijn artikel Installeer en gebruik Btrfs op Ubuntu 20.04 LTS.
Als je hulp nodig hebt bij het installeren van het Btrfs-bestandssysteem op Fedora, bekijk dan mijn artikel Installeer en gebruik Btrfs op Fedora 33.
Een Btrfs-bestandssysteem maken
Om te experimenteren met Btrfs-subvolumes, moet u een Btrfs-bestandssysteem maken.
Een Btrfs-bestandssysteem maken met het label gegevens op de sdb1 partitie, voer de volgende opdracht uit:
$ sudo mkfs.btrfs -L data /dev/sdb1
Er moet een Btrfs-bestandssysteem worden gemaakt.
Een map maken /gegevens met het volgende commando:
$ sudo mkdir -v /data
Om het Btrfs-bestandssysteem te koppelen dat is gemaakt op de sdb1 partitie in de /gegevens map, voer de volgende opdracht uit:
$ sudo mount /dev/sdb1 /data
Het Btrfs-bestandssysteem moet worden gemount zoals je kunt zien in de onderstaande schermafbeelding.
$ df -h /gegevens
Het Btrfs-bestandssysteem voorbereiden voor snapshots
In Btrfs kunt u alleen snapshots maken van Btrfs-subvolumes. De hoofdroot van een Btrfs-bestandssysteem is ook een subvolume. U kunt dus een back-up maken van het volledige Btrfs-bestandssysteem en van specifieke subvolumes.
In deze sectie wordt een Btrfs-subvolume gemaakt /data/projecten/web1 en maak de benodigde bestanden voor de volgende secties van dit artikel hieronder. Ik zal ook een map maken waar je je snapshots kunt bewaren. In de volgende secties laat ik u zien hoe u snapshots maakt (beschrijfbaar en alleen-lezen), een beschrijfbare snapshot bijwerkt en bestanden herstelt van de snapshot. Dus laten we beginnen.
Maak eerst een nieuwe map aan /gegevens/projecten als volgt:
$ sudo mkdir -v /data/projecten
Een nieuw subvolume maken web1 in de /gegevens/projecten map als volgt:
$ sudo btrfs subvolume create /data/projects/web1
Een nieuw bestand maken inhoudsopgave.html in de /data/projecten/web1 subvolume als volgt:
$ sudo nano /data/projects/web1/index.html
Typ de volgende regels codes in de inhoudsopgave.html het dossier.
Hallo Wereld 4
Als u klaar bent, drukt u op
Een nieuw bestand maken stijl.css in de /data/projecten/web1 subvolume als volgt:
$ sudo nano /data/projects/web1/style.css
Typ de volgende regels codes in de stijl.css het dossier.
h1kleur groen;
Als u klaar bent, drukt u op
Nu de /data/projecten/web1 subvolume heeft de inhoudsopgave.html en stijl.css het dossier.
$ ls -lh /data/projects/web1
Ik wil alle snapshots van dit Btrfs-bestandssysteem in de /gegevens/.momentopnamen map.
Maak de /gegevens/.momentopnamen map met het volgende commando:
$ sudo mkdir -v /data/.momentopnamen
Snapshots maken van een subvolume
Een momentopname maken van de /data/projecten/web1 subvolume in de /gegevens/.snapshots/web1-2020-12-25 directory (wordt automatisch aangemaakt), voer de volgende opdracht uit:
$ sudo btrfs subvolume snapshot /data/projects/web1 /data/.snapshots/web1-2020-12-25
Een momentopname van de /data/projecten/web1 directory moet worden aangemaakt op de /gegevens/.snapshots/web1-2020-12-25 map.
Zoals je kunt zien in de onderstaande schermafbeelding, een nieuw subvolume .snapshots/web1-2020-12-25 is gecreëerd. Een snapshot is eigenlijk een subvolume.
$ sudo btrfs subvolumelijst /data
U kunt meer informatie zien over de momentopname die u heeft gemaakt in de /gegevens/.snapshots/web1-2020-12-25 map als volgt:
$ sudo btrfs subvolume show /data/.snapshots/web1-2020-12-25
Zoals u kunt zien, zijn alle bestanden in de /data/projecten/web1 subvolume zijn in de /gegevens/.snapshots/web1-2020-12-25 momentopname.
$ boom -a /data
Bestanden herstellen van snapshots
In dit gedeelte laat ik je zien hoe je bestanden kunt herstellen van de Btrfs-snapshots.
Eerst ga ik je laten zien hoe je een enkel bestand van de momentopname kunt herstellen.
Open de /data/projecten/web1/index.html bestand met de nano-teksteditor als volgt:
$ sudo nano /data/projects/web1/index.html
Breng alle gewenste wijzigingen aan.
Als u klaar bent, drukt u op
Zoals je kunt zien, de belangrijkste inhoudsopgave.html bestand is anders dan de inhoudsopgave.html bestand in de momentopname.
$ cat /data/projecten/web1/index.html$ kat /data/.snapshots/web1-2020-12-25/index.html
We hebben de wijzigingen aangebracht in de hoofd inhoudsopgave.html bestand zijn ongewenst en we willen de inhoudsopgave.html bestand van de momentopname.
U kunt de herstellen inhoudsopgave.html bestand als volgt uit de snapshot:
$ sudo cp -v /data/.snapshots/web1-2020-12-25/index.html /data/projecten/web1/index.html
Zoals je kunt zien, is de inhoudsopgave.html bestand wordt hersteld vanaf de momentopname.
$ cat /data/projecten/web1/index.html$ kat /data/.snapshots/web1-2020-12-25/index.html
Laten we nu eens kijken hoe we alle bestanden/mappen van de snapshot kunnen herstellen.
Verwijder alle bestanden uit de /data/projecten/web1 momentopname als volgt:
$ sudo rm -rv /data/projects/web1/*
Voer de volgende opdracht uit om alle bestanden/mappen van de momentopname te herstellen:
$ sudo rsync -avz /data/.snapshots/web1-2020-12-25/ /data/projecten/web1/
Zoals u kunt zien, worden de bestanden/mappen hersteld vanaf de momentopname.
$ ls -lh /data/projects/web1
Laten we tot slot eens kijken hoe we bestanden/mappen kunnen herstellen van de snapshot in spiegelmodus. In spiegelmodus zijn de bestanden/mappen van het subvolume hetzelfde als in de snapshot. Als er bestanden/mappen in het subvolume zijn die niet beschikbaar zijn in de snapshot, zullen ze worden verwijderd.
Laten we een nieuw bestand in het subvolume maken om de bestandsstructuur te onderscheiden van de snapshot.
Maak een Leesmij.tekst bestand in de /data/projecten/web1 subvolume als volgt:
$ echo "hallo wereld 5" | sudo tee /data/projects/web1/README.tekst
Zoals u kunt zien, is de bestandsstructuur van de /data/projecten/web1 subvolume is anders dan de /gegevens/.snapshots/web1-2020-12-25 momentopname.
$ boom -a /data
Om de bestanden/mappen te herstellen van de /gegevens/.snapshots/web1-2020-12-25 momentopname naar de /data/projecten/web1 subvolume in spiegelmodus, voer de volgende opdracht uit:
$ sudo rsync -avz --delete /data/.snapshots/web1-2020-12-25/ /data/projecten/web1/
Alle bestanden/mappen van de /data/projecten/web1 subvolume moet worden hersteld (in spiegelmodus) vanuit de /gegevens/.snapshots/web1-2020-12-25 momentopname.
De bestandsboom van de /data/projecten/web1 subvolume en de /gegevens/.snapshots/web1-2020-12-25 momentopname moet hetzelfde zijn.
Zoals u kunt zien, is de index.html-bestand en stijl.de inhoud van het css-bestand is hetzelfde in de /data/projecten/web1 subvolume en de /gegevens/.snapshots/web1-2020-12-25 momentopname.
Inhoud van de inhoudsopgave.html en stijl.css bestand in de /data/projecten/web1 subvolume.
$ cat /data/projecten/web1/index.html$ cat /data/projecten/web1/style.css
Inhoud van de inhoudsopgave.html en stijl.css bestand in de /gegevens/.snapshots/web1-2020-12-25 momentopname.
$ cat /data/projecten/web1/index.html$ cat /data/projecten/web1/style.css
Een momentopname bijwerken
Standaard maakt het Btrfs-bestandssysteem beschrijfbare snapshots. Een Btrfs-snapshot is net als een subvolume. U kunt dus de bestanden/mappen van een beschrijfbare snapshot wijzigen/bijwerken.
Laten we de . updaten inhoudsopgave.html bestand in de /data/projecten/web1 subvolume.
Open eerst de inhoudsopgave.html bestand van de /data/projecten/web1 subvolume met de nano tekstverwerker als volgt:
$ sudo nano /data/projects/web1/index.html
Breng alle gewenste wijzigingen aan. Als u klaar bent, drukt u op
Zoals u kunt zien, de index.html-bestand van de /data/projecten/web1 subvolume is anders dan de /gegevens/.snapshots/web1-2020-12-25 momentopname.
$ cat /data/projecten/web1/index.html$ kat /data/.snapshots/web1-2020-12-25/index.html
U wilt de houden inhoudsopgave.html bestand van de /data/projecten/web1 subvolume.
Om de . te updaten inhoudsopgave.html bestand in de /gegevens/.snapshots/web1-2020-12-25 snapshot, voer de volgende opdracht uit:
$ sudo cp -v /data/projects/web1/index.html /gegevens/.snapshots/web1-2020-12-25/index.html
Zoals je kunt zien, is de inhoudsopgave.html bestand van de /gegevens/.snapshots/web1-2020-12-25 momentopname is bijgewerkt.
Het bijwerken van een snapshot is net zo eenvoudig als het kopiëren van nieuwe bestanden naar de snapshot.
Alleen-lezen snapshots maken van een subvolume
Soms wil je op geen enkele manier dat de snapshots die je hebt gemaakt worden bijgewerkt. In dat geval kunt u alleen-lezen snapshots maken.
Om bijvoorbeeld een alleen-lezen momentopname te maken /gegevens/.snapshots/web1-2020-12-26 van de /data/projecten/web1 subvolume, voer de volgende opdracht uit:
$ sudo btrfs subvolume snapshot -r /data/projects/web1 /data/.snapshots/web1-2020-12-26
Zoals je kunt zien, een nieuw subvolume .snapshots/web1-2020-12-26 is gecreëerd.
$ sudo btrfs subvolumelijst /data
Zoals je kunt zien, de momentopname /gegevens/.snapshots/web1-2020-12-26 is alleen-lezen.
$ sudo btrfs subvolume show /data/.snapshots/web1-2020-12-26
Laten we de . updaten inhoudsopgave.html bestand van de /data/projecten/web1 subvolume.
Open hiervoor de inhoudsopgave.html bestand van de /data/projecten/web1 subvolume met de nano tekstverwerker als volgt:
$ sudo nano /data/projects/web1/index.html
Breng alle gewenste wijzigingen aan. Als u klaar bent, drukt u op
Zoals je kunt zien, is de inhoudsopgave.html in de /data/projecten/web1 subvolume is anders dan de /gegevens/.snapshots/web1-2020-12-26 momentopname.
$ cat /data/projecten/web1/index.html$ kat /data/.snapshots/web1-2020-12-26/index.html
Laten we proberen de . bij te werken inhoudsopgave.html bestand in de /gegevens/.snapshots/web1-2020-12-26 momentopname.
$ sudo cp -v /data/projects/web1/index.html /gegevens/.snapshots/web1-2020-12-26/index.html
Zoals u kunt zien, kunt u de . niet bijwerken inhoudsopgave.html bestand van de /gegevens/.snapshots/web1-2020-12-26 momentopname omdat de momentopname alleen-lezen is.
Een momentopname verwijderen
Ik heb je eerder verteld dat een Btrfs-snapshot is als een subvolume. U kunt dus een Btrfs-snapshot verwijderen, net zoals u een Btrfs-subvolume verwijdert. Zelfde commando.
Dit is hoe de bestandsboom van het Btrfs-bestandssysteem is gemount op de /gegevens directory ziet er op dit moment uit.
$ boom -a /data
Laten we de . verwijderen .snapshots/web1-2020-12-25 momentopname.
$ sudo btrfs subvolumelijst /data
Om de . te verwijderen /gegevens/.snapshots/web1-2020-12-25 snapshot, voer de volgende opdracht uit:
$ sudo btrfs subvolume verwijderen /data/.snapshots/web1-2020-12-25
Zoals je kunt zien, de momentopname .snapshots/web1-2020-12-25 is niet meer.
$ sudo btrfs subvolumelijst /data
Zoals u kunt zien, zijn de bestanden/mappen van de /gegevens/.snapshots/web1-2020-12-25 momentopname wordt ook verwijderd.
$ boom -a /data
Conclusie
Dit artikel heeft u laten zien hoe u beschrijfbare en alleen-lezen snapshots kunt maken van uw Btrfs-bestandssysteemsubvolumes. Ik heb je ook laten zien hoe je een beschrijfbare momentopname kunt bijwerken en bestanden kunt herstellen van een momentopname. Ik heb je ook laten zien hoe je een Btrfs-snapshot verwijdert. Dit artikel zou u moeten helpen om aan de slag te gaan met de Btrfs snapshot-functie.