Come posso zerofillare il file / swap senza cancellare ciò che lo rende un file di scambio?


8

Ho uno script che eseguo per ottimizzare lo spazio su disco prima di eseguire il backup di un guest virtuale (in realtà non importa troppo quale hypervisor viene utilizzato).

Le versioni moderne di Ubuntu (ad es. 18.04) sembrano non utilizzare /swapfileuna partizione anziché uno scopo. Anche questo va bene.

Tuttavia, vorrei zerofillare il file di scambio insieme alla partizione di root che lo contiene.

Con le partizioni di swap questo era relativamente indolore in quanto c'era sempre un modo per estrarre l'esistente $UUIDdalla partizione di swap e, dopo aver riempito la partizione, eseguire mkswap -U $UUIDper ricreare detta partizione di swap.

Tuttavia, con il /swapfilenon vedo come farlo. Mentre mi rendo conto che non puoi montare un /swapfileUUID /etc/fstab, vorrei comunque conservare l'UUID.

Quindi ho bisogno di uno dei seguenti per procedere:

  1. Ho bisogno di un metodo in grado di zerofillare il file di scambio senza cancellare anche quelle strutture che lo rendono una partizione di scambio (cioè evitare di dover eseguire mkswap -U $UUID)
  2. Ho bisogno di un metodo per recuperare l'UUID esistente da un file di scambio (al contrario di una partizione in cui posso usare qualsiasi cosa blkiddall'osservare /dev/disk/by-uuid/$UUID...)

Risposte:


15
  1. Questo non cancellerà il file di swap così come ricrearlo, ma se lo cancelli dopo aver saltato il primo 4KiB (a rigor di termini, la prima pagina, che dipende dalla tua architettura), non toccherai nessuna delle strutture che identificano un file di scambio.

  2. blkid funziona bene anche sui file di scambio:

    $ mkswap swap
    Setting up swapspace version 1, size = 512 MiB (536866816 bytes)
    no label, UUID=7916b81f-1faa-4b7d-84ef-b0bf2f75dbbc
    
    $ blkid swap
    swap: UUID="7916b81f-1faa-4b7d-84ef-b0bf2f75dbbc" TYPE="swap"
    

Il formato dell'intestazione è definito nel kernel : il vecchio formato ha un valore magico alla fine della prima pagina, il nuovo formato combina quello con un'area libera di 1 KiB, quindi un numero di campi (versione, dimensione, pagine non valide, UUID, etichetta) che si adattano perfettamente alla prima pagina.


Caspita, la risposta più veloce che abbia mai ricevuto su qualsiasi sito StackExchange. Grazie. Francamente non ho mai usato blkidun parametro. Immagino che dovrei farlo piuttosto che, ad esempio, usare ddcon un offset.
0xC0000022L

3
Bene, leggere l'UUID e ricreare il file di scambio è probabilmente l'opzione più semplice.
Stephen Kitt,

@ 0xC0000022L esamina anche le opzioni del formato di output di blkid. A seconda della versione, potresti essere in grado di fare blkid swap -o value -s uuidper estrarre solo l'UUID.
Muru,

@muru grazie, già fatto e optato per blkid -o export <file>il quale il tubo da I seda prepend local a ciascuna linea e quindi evalutilizzando Bash. In questo modo ho subito i valori nella mia funzione di variabile d'ambiente locale.
0xC0000022L
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.