Bcache: differenze tra le versioni

m
 
(9 versioni intermedie di 2 utenti non mostrate)
Riga 2: Riga 2:


== Introduzione ==
== Introduzione ==
'''bcache''' è uno strumento che permette di creare un volume dati costituito da più partizioni, di cui una che fungerà da cache per tutte le altre.
'''bcache''' è uno strumento che permette di creare un volume dati costituito da più partizioni, di cui una che fungerà da cache per tutte le altre.<br/>
Il minimo numero di partizioni coinvolte è quindi pari a due, una di cache e una con i dati. L'obiettivo è sfruttare un disco SSD per velocizzare l'accesso casuale ai dati di un tradizionale disco meccanico (''SSD caching'').
Il minimo numero di partizioni coinvolte è quindi pari a due, una di cache e una con i dati. L'obiettivo è sfruttare un disco [[SSD]] per velocizzare l'accesso casuale ai dati di un tradizionale disco meccanico (''SSD caching'').
Considerazioni:
Considerazioni:
* i benefici di una simile soluzione rispetto a quella del singolo discolo meccanico sono assolutamente marginali, o inesistenti, nel caso di IO sequenziale;
* i benefici di una simile soluzione rispetto a quella del singolo disco meccanico sono assolutamente marginali, o inesistenti, nel caso di IO sequenziale;
* questo tipo di strumento fu concepito agli albori degli SSD, quando un disco a stato solido da 32 GB costava ancora un patrimonio.
* questo tipo di strumento fu concepito agli albori degli SSD, quando un disco a stato solido da 32 GB costava ancora un patrimonio.
In base a quanto scritto è evidente come oggi giorno l'SSD caching abbia praticamente perso di significato, almeno per quanto riguarda gli utenti comuni. È più semplice e performante la soluzione disco SSD più disco meccanico: sull'SSD si installa il sistema operativo e gli applicativi di uso più frequente, mentre sul disco meccanico i dati più voluminosi (film, musica, ecc.).
In base a quanto scritto è evidente come oggi giorno l'SSD caching abbia praticamente perso di significato, almeno per quanto riguarda gli utenti comuni. È più semplice e performante la soluzione disco SSD più disco meccanico: sull'SSD si installa il sistema operativo e gli applicativi di uso più frequente, mentre sul disco meccanico i dati più voluminosi (film, musica, ecc.).
Riga 13: Riga 13:


=== Note su Windows ===
=== Note su Windows ===
Uno strumento simile per windows è costituito da "Rapid Storage Tecnology" di intel, che però non permette di usare lo stesso disco su cui è installato windows e inoltre richiede che:
Uno strumento simile per Windows è costituito da "Rapid Storage Tecnology" di intel, che però non permette di usare lo stesso disco su cui è installato Windows e inoltre richiede che:
* il chipset della propria scheda madre (o del controller sata aggiuntivo) supporti tale tecnologia;
* il chipset della propria scheda madre (o del controller SATA aggiuntivo) supporti tale tecnologia;
* il controller SATA sia impostato su RAID nelle opzioni del firmware della scheda madre (BIOS, UEFI, ecc.) o del controller sata aggiuntivo.
* il controller SATA sia impostato su RAID nelle opzioni del [[firmware]] della scheda madre ([[BIOS]], [[UEFI]], ecc.) o del controller SATA aggiuntivo.


== Installazione ==
== Installazione ==


Serve il pacchetto <code>bcache-tools</code> disponibile da repository:
Serve il pacchetto <code>bcache-tools</code> disponibile da [[repository]]:
<pre># aptitude install bcache-tools</pre>
<pre># aptitude install bcache-tools</pre>


Riga 27: Riga 27:


Creare due partizioni senza specificare alcun file system:
Creare due partizioni senza specificare alcun file system:
* una sul disco solido che fungerà da cache, es. <code>sda3</code>;
* una sul disco solido che fungerà da cache, es. <code>sdx6</code>;
* una su un disco meccanico per i dati veri e propri (tecnicamente chiamata di ''backup''), es. <code>sdb1</code>.
* una su un disco meccanico per i dati veri e propri (tecnicamente chiamata di ''backup''), es. <code>sdy6</code>.
: {{Box|Nota|Chi scrive non è sicuro che sia possibile convertire una partizione esistente in una utilizzabile da ''bcache'', pertanto l'intera guida si fonda sul presupposto che l'utente prima crei il volume ''bcache'' e poi proceda a popolarlo con i suoi dati}}
: {{Box|Nota|Chi scrive non è sicuro che sia possibile convertire una partizione esistente in una utilizzabile da ''bcache'', pertanto l'intera guida si fonda sul presupposto che l'utente prima crei il volume ''bcache'' e poi proceda a popolarlo con i suoi dati.}}
Se necessario è possibile usare il comando <code>wipefs</code> per eliminare tutti i dati relativi al file system di una partizione ('''attenzione''' che contestualmente si perdono eventuali dati memorizzati su tale partizione):
Se necessario è possibile usare il comando <code>wipefs</code> per eliminare tutti i dati relativi al file system di una partizione ('''attenzione''' che contestualmente si perdono eventuali dati memorizzati su tale partizione):
<pre># wipefs -a /dev/sdXY</pre>
<pre># wipefs -a /dev/sdXY</pre>
Riga 42: Riga 42:


È possibile creare il volume <code>bcache0</code> in un solo passo col seguente comando:
È possibile creare il volume <code>bcache0</code> in un solo passo col seguente comando:
<pre># make-bcache -B /dev/sdb1 -C /dev/sda3</pre>
<pre># make-bcache -B /dev/sdy6 -C /dev/sdx6</pre>
Nel caso si voglia associare una cache a più partizioni di backup è sufficiente indicare tali partizioni una di seguito all'altra subito dopo l'opzione <code>-B</code>
Nel caso si voglia associare una cache a più partizioni di backup è sufficiente indicare tali partizioni una di seguito all'altra subito dopo l'opzione <code>-B</code>


Riga 49: Riga 49:
Molto semplicemente si trasformano individualmente le partizioni di backup e caching e poi si associano le une alle altre:
Molto semplicemente si trasformano individualmente le partizioni di backup e caching e poi si associano le une alle altre:
<pre>
<pre>
# make-bcache -B /dev/sdb1<br/>
# make-bcache -B /dev/sdy6<br/>
# make-bcache -C /dev/sda3
# make-bcache -C /dev/sdx6
</pre>
</pre>
Quando si trasformano le partizioni vengono stampate a video diverse informazioni; in particolare si prenda nota del valore <code>Set UUID</code> associato alla trasformazione della partizione di cache.
Quando si trasformano le partizioni vengono stampate a video diverse informazioni; in particolare si prenda nota del valore <code>Set UUID</code> associato alla trasformazione della partizione di cache.<br/>
Associare le partizioni di backup e caching col seguente comando:
Associare le partizioni di backup e caching col seguente comando:
<pre>echo CSET-UUID > /sys/block/bcache0/bcache/attach</pre>
<pre># echo CSET-UUID > /sys/block/bcache0/bcache/attach</pre>
dove "CSET-UUID" non è nient'altro che il valore <code>Set UUID</code> della partizione di cache. Chiaramente se esistono già altri volumi ''bcache'' sarà necessario modificare il precedente comando sostituendo <code>bcache0</code> con il volume corretto (<code>bcache1</code> o quello che è).<br/>
dove "CSET-UUID" non è nient'altro che il valore <code>Set UUID</code> della partizione di cache. Chiaramente se esistono già altri volumi ''bcache'' sarà necessario modificare il precedente comando sostituendo <code>bcache0</code> con il volume corretto (<code>bcache1</code> o quello che è).<br/>
Nel caso si sia perso il valore <code>Set UUID</code> dovrebbe essere possibile recuperarlo col comando:
Nel caso si sia perso il valore <code>Set UUID</code> dovrebbe essere possibile recuperarlo col comando:
<pre>bcache-super-show /dev/sda3</pre>
<pre>$ bcache-super-show /dev/sdx6</pre>
dove si ricorda che <code>/dev/sda3</code> è la partizione di caching ai fini di questa guida (il valore da segnare è <code>Set UUID</code> non semplicemente <code>UUID</code> o <code>dev.uuid</code>).
dove si ricorda che <code>/dev/sdx6</code> è la partizione di caching ai fini di questa guida (il valore da segnare è <code>Set UUID</code> non semplicemente <code>UUID</code> o <code>dev.uuid</code>).


=== Utilizzo volume ===
=== Utilizzo volume ===


Testare lo stato del volume col seguente comando:
Testare lo stato del volume col seguente comando:
<pre>cat /sys/block/bcache0/bcache/state</pre>
<pre>$ cat /sys/block/bcache0/bcache/state</pre>
che dovrebbe restituire <code>clean</code>.
che dovrebbe restituire <code>clean</code>.
{{Warningbox|Se non è la prima volta che il volume <code>bcache0</code> viene creato è necessario pulirlo con <code>wipefs -a /dev/bcache0</code> prima di creare il nuovo file system, altrimenti si potrebbero avere errori in fase di montaggio dello stesso.}}
A questo punto è possibile formattare e usare il volume <code>bcache0</code> come qualsiasi altro dispositivo. Per esempio per formattarlo in ext4:
A questo punto è possibile formattare e usare il volume <code>bcache0</code> come qualsiasi altro dispositivo. Per esempio per formattarlo in ext4:
<pre>mkfs.ext4 /dev/bcache0</pre>
<pre># mkfs.ext4 /dev/bcache0</pre>
Se lo si desidera è anche possibile cambiare la modalità di caching, per esempio per passare da quella più sicura <code>writethrough</code> a quella più performante <code>writeback</code>:
Se lo si desidera è anche possibile cambiare la modalità di caching, per esempio per passare da quella più sicura <code>writethrough</code> a quella più performante <code>writeback</code>:
<pre># echo writeback > /sys/block/bcache0/bcache/cache_mode</pre>
<pre># echo writeback > /sys/block/bcache0/bcache/cache_mode</pre>


Riga 76: Riga 77:
Nel caso si abbia necessità di cambiare la partizione di cache procedere come segue:
Nel caso si abbia necessità di cambiare la partizione di cache procedere come segue:
# se possibile fare un backup dei dati presenti sul volume ''bcache'';
# se possibile fare un backup dei dati presenti sul volume ''bcache'';
# assicurarsi che il volume ''bcache'' non sia in uso, per esempio smontandolo del tutto.
# assicurarsi che il volume ''bcache'' non sia in uso, per esempio smontandolo del tutto;
# distaccare la cache esistente col seguente comando:
# distaccare la cache esistente col seguente comando:
: <pre>echo CSET-UUID > /sys/block/bcache0/bcache/detach</pre>
: <pre># echo CSET-UUID > /sys/block/bcache0/bcache/detach</pre>
: dove il valore ''CSET-UUID'' è ricavabile con il comando <code>bcache-super-show</code> come mostrato nel paragrafo dedicato alla creazione del volume in più passi. Al solito sostituire nel precedente comando il volume bcache corretto se diverso da <code>bcache0</code> (<code>bcache1</code> o quello che è).
: dove il valore ''CSET-UUID'' è ricavabile con il comando <code>bcache-super-show</code> come mostrato nel paragrafo dedicato alla creazione del volume in più passi. Al solito sostituire nel precedente comando il volume bcache corretto se diverso da <code>bcache0</code> (<code>bcache1</code> o quello che è).
:4. il comando:
:4. il comando:
: <pre>cat /sys/block/bcache0/bcache/state</pre>
: <pre>$ cat /sys/block/bcache0/bcache/state</pre>
: dovrebbe resituire ora <code>no cache</code>
: dovrebbe restituire ora <code>no cache</code>
:5. creare una nuova partizione di cache ed associarla al volume dati esistente come descritto nel paragrafo dedicato alla creazione del volume in più passi.
:5. creare una nuova partizione di cache ed associarla al volume dati esistente come descritto nel paragrafo dedicato alla creazione del volume in più passi.


Riga 92: Riga 93:


Nel caso si abbia necessità di rivedere il partizionamento del disco contenente la partizione dati del volume bcache è necessario distruggere prima il volume bcache stesso, diversamente non sarà possibile modificare e/o eliminare la suddetta partizione dati.
Nel caso si abbia necessità di rivedere il partizionamento del disco contenente la partizione dati del volume bcache è necessario distruggere prima il volume bcache stesso, diversamente non sarà possibile modificare e/o eliminare la suddetta partizione dati.
{{Warningbox|La seguente procedura comporterà la perdita di tutti i dati memorizzati nel volume bcache}}
{{Warningbox|La seguente procedura comporterà la perdita di tutti i dati memorizzati nel volume bcache.}}
Posto che il volume bcache si chiami <code>bcache0</code>, che la partizione di cache sia <code>sdx6</code> e quella dati <code>sdy6</code> (usare il comando <code>bcache-super-show</code> per ottenere i riferimenti corretti), procedere come segue:
Posto che il volume bcache si chiami <code>bcache0</code>, che la partizione di cache sia <code>sdx6</code> e quella dati <code>sdy6</code> (usare il comando <code>bcache-super-show</code> per ottenere i riferimenti corretti), procedere come segue:
# eliminare la cache come descritto nella precedente sezione, ''Eliminazione cache'';
# eliminare la cache come descritto nella precedente sezione, ''Eliminazione cache'';
# smontare la partizione dati del volume bcache se ancora non lo si è fatto;
# smontare la partizione dati del volume bcache se ancora non lo si è fatto;
# fermare il volume bcache con il seguente comando:
# fermare il volume bcache con il seguente comando:
: <pre>echo 1 > /sys/block/sdy/sdy1/bcache/stop</pre>
: <pre># echo 1 > /sys/block/sdy/sdy1/bcache/stop</pre>
# Eseguire il comando
# Eseguire il comando:
: <pre>cat /sys/block/bcache0/bcache/state</pre>
: <pre>$ cat /sys/block/bcache0/bcache/state</pre>
: se il risultato è ''cat: /sys/block/bcache0/bcache/state: File o directory non esistente'' allora il volume bcache è stato fermato correttamente e la partizione dati può essere modificata come di norma.
: se il risultato è ''cat: /sys/block/bcache0/bcache/state: File o directory non esistente'' allora il volume bcache è stato fermato correttamente e la partizione dati può essere modificata come di norma.
==== Liberare la partizione di caching ====
 
È probabile che la partizione di caching risulti ancora registrata a questo punto, quindi risulterà impossibile eliminarla con <code>wipefs</code> o semplicemente riutilizzarla per un nuovo volume bcache. Entrambe le operazioni infatti restituiranno probabilmente un errore contenente ''Device or resource busy''.
==== Pulire le partizioni ====
In tal caso
È probabile che la partizione di caching risulti ancora registrata a questo punto, quindi risulterà impossibile eliminarla con <code>wipefs</code> o semplicemente riutilizzarla per un nuovo volume bcache. Entrambe le operazioni infatti restituiranno probabilmente un errore contenente ''Device or resource busy''.<br/>
In tal caso:
<pre># cd /sys/fs/bcache/<cset.uuid></pre>
<pre># cd /sys/fs/bcache/<cset.uuid></pre>
dove al solito ''<cset.uuid>'' è l'identificativo del volume bcache appena fermato. Digitare
dove al solito ''<cset.uuid>'' è l'identificativo del volume bcache appena fermato. Digitare:
<pre># echo 1 > stop</pre>
<pre># echo 1 > stop</pre>
e quindi pulire le partizioni di cache e dati:
per annullare la registrazione delle partizioni e quindi pulirle:
<pre>
<pre>
# wipefs -a /dev/sdx6
# wipefs -a /dev/sdx6
Riga 114: Riga 116:
/dev/sdy6: 16 bytes were erased at offset 0x00001018 (bcache): c6 85 73 f6 4e 1a 45 ca 82 65 f5 7f 48 ba 6d 81
/dev/sdy6: 16 bytes were erased at offset 0x00001018 (bcache): c6 85 73 f6 4e 1a 45 ca 82 65 f5 7f 48 ba 6d 81
</pre>
</pre>
A questo punto il volume <code>bcache0</code> dovrebbe essere scomparso da <code>/dev/</code>
A questo punto il volume <code>bcache0</code> dovrebbe essere scomparso da <code>/dev/</code> e la directory <code>/sys/fs/bcache/</code> dovrebbe risultare inesistente (eventualmente provare a riavviare il PC).<br>
{{Box|Nota|Se si vuole ricreare un volume bcache è possibile che il comando che permette di creare ed attaccare volume dati e cache fallisca, creando solo la cache. In tal caso dovrebbe essere sufficiente creare il volume dati e poi attaccarlo seguendo la procedura manuale.}}
È ora possibile configurare normalmente le partizioni pulite, compreso riutilizzarle per creare un nuovo volume bcache (dopo averle ridimensionate per esempio).


== Approfondimenti ==
== Approfondimenti ==
6 999

contributi