Tutorials

  • Presto on-line...

About ...

  • ... questo sito
  • ... me


Disk Journaling, a protezione del file system

diskutil
Il journaling è una tecnica che aiuta a proteggere l'integrità di un disco HFS+ sia su MacOS X che su MacOS X Server. Quest'articolo è più che altro una scusa per muovere qualche passo verso il comando diskutil.

Un po’ di teoria sul journaling:

Il file system (il nostro HFS+) si preoccupa di gestire, ordinare e recuperare in maniera strutturata ogni singola porzione dei nostri files presenti su un disco appoggiandosi ad una apposita tabella di descrizione. Ogni volta che avviene una modifica sui files, il file system corregge le proprie tabelle di descrizione che rappresentano lo stato dei files stessi: nome, lunghezza, posizione, privilegi di sicurezza e tante altre cose…

E’ facile immaginare che nel momento in cui avviene una improvvisa interruzione di corrente o un crash di sistema, può verificarsi anche una discrepanza tra lo stato dei nostri files e le relative tabelle di descrizione che quindi non riflettono più l’ultima "fotografia" del disco: il blocco improvviso del sistema ha bloccato anche l’ultimo aggiornamento delle tabelle di descrizione.
Al reboot, il file system deve controllare tutto il disco e deve fare del suo meglio per correggere le tabelle di descrizione in modo da sincronizzarle con lo stato reale dei nostri files.
Se i dischi sono grandi e se ci sono molti files, questa operazione può richiedere molto tempo, e inoltre non è detto che sia
sempre accurata!
Per aiutare questa fase di ripristino dell’operatività è stato implementato il journaling. Come suggerisce il nome, si tratta di una sorta di diario delle operazioni, o meglio: un vero log delle operazioni in corso.
Semplificando un po’: prima il file system scrive nel log quello che vuole fare, poi lo fa, ed in fine cancella il log.
Questo sistema ha lo svantaggio di inserire un piccolo degrado delle prestazioni (le operazioni di scrittura sono un po’ più lente) ma ha il vantaggio che a seguito di un crash, il file system sa cosa stava facendo subito prima dell’interruzione e sa cosa non ha finito di fare. Ha quindi una traccia da seguire per tornare ad uno stato corretto, sicuro ed operativo… è può farlo molto velocemente!
Quindi, niente più attese al reboot e vengono minimizzati (o quasi annullati) i possibili guai ai nostri files.

Lo accendiamo?

Vediamo come sia possibile abilitare journaling anche su Mac OS X: Digitando il comando diskutil senza nessun parametro possiamo vedere un piccolo help:

[host1:~] user1% diskutil
Disk Utility Tool       ?2002, Apple Computer, Inc.
Utility to manage disks and volumes.
Most options require root access to the device

Usage:  diskutil <verb> <options>
     <verb> is one of the following:
     list                  (List the partitions of a disk)
     information | info    (Get information on a disk or volume)

     unmount               (Unmount a single volume)
     unmountDisk           (Unmount an entire disk (all volumes))
     eject                 (Eject a disk)
     mount                 (Mount a single volume)
     mountDisk             (Mount an entire disk (all mountable volumes))
     rename                (Rename a volume)

     enableJournal         (Enable HFS+ journaling on a mounted HFS+ volume)
     disableJournal        (Disable HFS+ journaling on a mounted HFS+ volume)

     verifyDisk            (Verify the structure of a volume)
     repairDisk            (Repair the structure of a volume)

     verifyPermissions     (Verify the permissions of a volume)
     repairPermissions     (Repair the permissions of a volume)

     eraseDisk             (Erase an existing disk, removing all volumes)
     eraseVolume           (Erase an existing volume)
     eraseOptical          (Erase an optical media (CD/RW, DVD/RW, etc.))

     partitionDisk         ((re)Partition a disk, removing all volumes)

     createRAID            (Create a RAID set on multiple disks)
     destroyRAID           (Destroy an existing RAID set)
     checkRAID             (Check a RAID set for errors)
     repairMirror          (Repair a damaged RAID mirror set)

 
Per prima cosa vediamo quanti dischi abbiamo in linea:
[host1:~] user1% diskutil list
/dev/disk0
   #:                   type name               size      identifier
   0: Apple_partition_scheme                    *38.2 GB  disk0
   1:    Apple_partition_map                    31.5 KB   disk0s1
   2:         Apple_Driver43                    28.0 KB   disk0s2
   3:         Apple_Driver43                    28.0 KB   disk0s3
   4:       Apple_Driver_ATA                    28.0 KB   disk0s4
   5:       Apple_Driver_ATA                    28.0 KB   disk0s5
   6:         Apple_FWDriver                    256.0 KB  disk0s6
   7:     Apple_Driver_IOKit                    256.0 KB  disk0s7
   8:          Apple_Patches                    256.0 KB  disk0s8
   9:              Apple_HFS HDSaxX             12.6 GB   disk0s9
   10:              Apple_HFS HDSaxDoc           12.6 GB   disk0s10
   11:              Apple_HFS HDSaxScratch       13.0 GB   disk0s11
/dev/disk1
   #:                   type name               size      identifier
   0: Apple_partition_scheme                    *9.4 GB   disk1
   1:    Apple_partition_map                    31.5 KB   disk1s1
   2:              Apple_HFS Scratch            9.4 GB    disk1s2

Guardando sotto la colonna "name" scopriamo che in questo momento ho un HardDisk da 38.2 GB partizionato in 3 volumi chiamati "HDSaxX", "HDSaxDoc", "HDSaxScratch".
Ho inoltre un HardDisk firewire con un volume chiamato "Scratch"da 9.4 GB.
Ogni HardDisk è mappato su un device e così scopriamo che in questo momento il primo HardDisk è mappato sul device 0 (/dev/disk0) mentre l’HardDisk firewire è mappato sul device 1 (/dev/disk1).
Un HardDisk a sua volta è composto da diverse partizioni e nella colonna "identifier" possiamo leggere l’identificatore completo di ogni singolo volume. Per esempio il volume "HDSaxX" è mappato sul device /dev/disk0s9.
A questo punto posso procedere ad una richiesta di maggiori informazioni:
[host1:~] user1% diskutil info /dev/disk0s9
   Device Node:        /dev/disk0s9
   Device Identifier:  disk0s9
   Mount Point:        /
   Volume Name:        HDSaxX
   File System:        HFS+
   Partition Type:     Apple_HFS
   Media Type:         Generic
   Protocol:           ATA
   Total Size:         12.6 GB
   Free Space:         636.9 MB
   Read Only:          No
   Ejectable:          No

... e posso notare che su quel volume ho solo più 600 MB liberi!

Se voglio abilitare il journaling sul mio disco devo utilizzare i privilegi di root per cui antepongo il comando sudo...:

[host1:~] user1% sudo diskutil enableJournal /dev/disk0s9
Password: (inserisco la mia password per ottenere i privilegi di root)
Allocated 8192K for journal file.
Journaling has been enabled on /dev/disk0s9

e poi verifico:
[host1:~] user1% diskutil info /dev/disk0s9
   Device Node:        /dev/disk0s9
   Device Identifier:  disk0s9
   Mount Point:        /
   Volume Name:        HDSaxX
   File System:        HFS+ (Journaled)
   Partition Type:     Apple_HFS
   Media Type:         Generic
   Protocol:           ATA
   Total Size:         12.6 GB
   Free Space:         636.9 MB
   Read Only:          No
   Ejectable:          No

OK. Adesso posso dormire sonni più tranquilli!

Per approfondimenti:

Consiglio di approfondire sulle pagine del supporto tecnico della Apple: Mac OS X: About file system journaling.

Posted on Apr 23, 2003 - 07:23 PM


Ricerca:


Adv:

ApplePro :
Vuoi acquistare un prodotto dalla Apple? Sei un utente Pro (cioè hai la partita IVA)? Se vuoi supportare il nostro sito, passa da qui: apple pro.