How To Use -> diskutil

Der Befehl diskutil1) ist ein Teil der CLI Variante des GUI-basierten Festplatten-Dienstprogramms. Mit diskutil lassen sich Informationen über Partitionen abrufen (info), die Zugriffsrechte überprüfen (verifyPermissions) und ggf reparieren (repairPermissions), Partitionen löschen (eraseVolume), deren Grösse verändern (resizeVolume), neue Partitionen anlegen (partitionDisk), Partitionen teilen (splitPartition) oder wieder zusammenfügen (mergePartition).

Die Syntax des Befehls lautet: diskutil Kommando [Option] [Partition]

Informationen auslesen:

Mit dem Kommando list lassen sich Information über alle installierten Devices auslesen:

$ diskutil list 
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *640.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            424.0 GB   disk0s2
   3:       Microsoft Basic Data BOOTCAMP                215.8 GB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk1
   1:                        EFI                         209.7 MB   disk1s1
   2:                  Apple_HFS HD_2                    499.8 GB   disk1s2
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk2
   1:                        EFI                         209.7 MB   disk2s1
   2:                  Apple_HFS HD_3                    499.8 GB   disk2s2
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk3
   1:                        EFI                         209.7 MB   disk3s1
   2:                  Apple_HFS HD_4                    499.8 GB   disk3s2
/dev/disk5
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *2.0 GB     disk5
   1:                  Apple_HFS USB-STICK               2.0 GB     disk5s1

Wie auch in der Linuxwelt, wo das erste Device zB »hda« und das zweite »hdb« (bzw. bei SCSI Platten »sda« und »sdb«) benannt werden, wird bei Mac OS die erste Platte »disk0« und die zweite Platte »disk1« benannt (→ Device Identifier). Bei Linux wird dann die erste Partition auf dem ersten Device »hda1« genannt, bei Mac OS hingegen »disk0s1« (→ Device Node). In meinem System residiert die EFI Partition in »disk0s1«, die Mac Partition auf »disk0s2« und die BootCamp Partition auf »disk0s3«.

Die EFI Partition wird auf jedem fest installierten Device angelegt. Hier wird normalerweise das Boot Loader Programm untergebracht. In Mac OS ist diese Partition allerdings leer bzw. kommt beim Booten keine spezielle Rolle zu, der Platz wird lediglich genutzt um Firmware Updates und das Firmware Flash Utility abzulegen.

Im weiteren Verlauf dieses Tutorials verwende ich meinen USB-Stick, der hier als disk5s1 mit dem Namen USB-STICK angezeigt wird. Detailierte Infos über ein Volume bekommt man mit dem Kommando info:

$ diskutil info /dev/disk5s1 
   Device Identifier:        disk5s1
   Device Node:              /dev/disk5s1
   Part Of Whole:            disk5
   Device / Media Name:      Untitled 1

   Volume Name:              USB-STICK
   Escaped with Unicode:     USB-STICK

   Mounted:                  Yes
   Mount Point:              /Volumes/USB-STICK
   Escaped with Unicode:     /Volumes/USB-STICK

   File System:              HFS+
   Type:                     hfs
   Name:                     Mac OS Extended
   Owners:                   Disabled

   Partition Type:           Apple_HFS
   Bootable:                 Not bootable
   Media Type:               Generic
   Protocol:                 USB
   SMART Status:             Not Supported
   Volume UUID:              F717C9AB-A483-3C14-996E-07736D2CB9C1

   Total Size:               2.0 GB (1998710784 Bytes) (exactly 3903732 512-Byte-Blocks)
   Volume Free Space:        2.0 GB (1985560576 Bytes) (exactly 3878048 512-Byte-Blocks)

   Read-Only Media:          No
   Read-Only Volume:         No
   Ejectable:                Yes

   Whole:                    No
   Internal:                 No
   Low Level Format:         Not Supported

Ein nicht ganz unwichtiger Parameter in der Ausgabe ist »Owners«. Sind die Ownerships auf dem Volume aktiviert bedeutet das, dass den Dateien, Verzeichnissen und Links feste Eigentümer (Owner, Groups) zugewiesen werden. Im Umkehrschluss bedeutet »disabled« bzw. deaktiviert, dass der momentane Benutzer auf das Volume zugreifen kann. Das ist vor allem wichtig bei USB-Sticks oder anderen Wechseldatenträgern, dass jeder Benutzer auch auf die Daten zugreifen kann, wenn er denn einen solchen Datenträger an seinem Gerät anschließt, auch wenn sich der Benutzername von dem unterscheidet, welcher die Daten erstellt hat. Bei HFS+ formatieren USB Datenträgern ist dies bereits standardmäßig der Fall.

Bei gemounteten Volumes kann das Volume auch über seinen Mountpoint angesprochen werden. Der Befehl diskutil info /dev/disk5s1 liefert das selbe Ergebniss wie der Befehl diskutil info /Volumes/USB-STICK. Mit dem Kommando mount bzw. unmount werden Partitionen eingehängt bzw. wieder ausgeworfen.

$ diskutil unmount /Volumes/USB-STICK/ 
Volume USB-STICK on disk5s1 unmounted
$ diskutil mount /dev/disk5s1  
Volume USB-STICK on /dev/disk5s1 mounted

Datenträger bzw. Volumes einhängen und auswerfen:

Mit dem Kommando unmountDisk werden alle Partitionen eines Datenträgers auf einmal ausgeworfen. Mit der Option force wird das Auswerfen erzwungen, wenn das Volume nicht auf normale Art und Weise ausgeworfen werden kann. Eine weitere Variante zB Wechseldatenträger auszuwerfen ist das Kommando eject. Anders herum, können mit mountDisk auch alle Partitionen eines Datenträgers auf einmal eingehängt werden, zusätzlich kann mit der Option readOnly auch der Schreibzugriff auf dem Volume bzw. Datenträger unterbunden werden:

$ diskutil unmountDisk force /dev/disk5 
Forced unmount of all volumes on disk5 was successful

$ diskutil mountDisk readOnly /dev/disk5 
Volume(s) mounted successfully
$ mount 
~~~ snip ~~~
/dev/disk5s1 on /Volumes/USB-STICK (hfs, local, nodev, nosuid, read-only, noowners)

$ diskutil eject /dev/disk5 
Disk /dev/disk5 ejected

Datenträger löschen:

Zum Löschen von Datenträgern können verschiedene Methoden zum Einsatz kommen. Die einfachste Methode ist das Kommando reformat. Der Nachteil dieser Variante liegt darin, dass die Daten wieder herzustellen sind. reformat entfernt zwar das vorhandene Dateisystem, lässt jedoch die Dateistruktur erstmal unberührt. Das entspricht der Option »Daten nicht löschen« in den Sicherheitsoptionen des Festplatten-Dienstprogramms. Mit den Kommandos zeroDisk, randomDisk und secureErase können auch Restbestände von Daten entfernt werden, was eine Restaurierung der Daten erheblich erschwert, bis unmöglich macht.

Während das Kommando zeroDisk den Datenträger oder das Volume einfach mit Nullen überschreibt, was der Festplatten-Dienstprogramm Option »Daten mit Nullen überschreiben« entspricht, verwendet das Kommando randomDisk eine Zufallsstruktur zum Überschreiben des Datenträgers bzw. des Volumes. Diese Option wird im Festplatten-Dienstprogramm nicht angeboten. Des Weiteren muss dem Kommando randomDisk noch die Anzahl der Läufe mitgegeben werden. Die mit Abstand aber sicherste Variante ist secureErase, welches drei Modis kennt. Modus 1 entspricht einem einfachen randomDisk während bei Modus 2 das Medium in sieben Durchläufen mit Zufallswerten überschrieben wird. Dieser Modus entspricht der Empfehlung des BSI für das sichere Löschen von Datenträgern. Der dritte Modus entspricht wohl einem Paranoia Modus, hier wird der Datenträger in 35 Läufen abwechselnd mit Nullen, mit Einsen und mit Zufallswerten überschrieben. Wer diesen Modus nutzen möchte, sollte allerdings nicht in Eile sein. Die Bearbeitungszeit eines Datenträgers aktueller Grössenordnungen (≈ 1TB) wird viele, viele Stunden benötigen. Wenn die Steuerfahndung bereits an der Tür klingelt wird es wohl zu spät sein. Diese beiden Modis sind ebenfalls im Festplatten-Dienstprogramm anwählbar.

$ diskutil zeroDisk /dev/disk5 
Started erase on disk5
Finished erase on disk5

Das Kommando secureErase kennt noch eine weitere Option, welche in der Lage ist nur den freien Speicher auf dem Volume zu löschen bzw. zu überschreiben. Werden Daten auf einem Volume gelöscht, werden diese nicht wirklich gelöscht sondern nur die Zuordnung des Speicherbereichs aus dem Inhaltsverzeichnis des Volumes gelöscht. Die Informationen in diesen Speicherbereichen bleiben solange unangetastet, bis dieser Bereich vom System mit neuen Daten gefüllt wird. Die secureErase-Option freespace übernimmt diese Aufgabe für alle frei gekennzeichneten Bereiche und erschwert somit eine Rekonstruktion kürzlich gelöschter Daten.

$ diskutil secureErase freespace 1 /dev/disk5s1 
Started erase on disk5s1 USB-STICK
Creating temporary file
Securely erasing file
Creating temporary file
Securely erasing file
Mounting disk
Finished erase on disk5s1 USB-STICK

Partitionen anlegen

Das Kommando eraseVolume löscht zwar auch ein Volume, analog zum og Kommando reformat-Kommando, jedoch wird hier nicht das Dateisystem neu erstellt sondern man kann dem Kommando Informationen mitgeben, welche im gleichen Zug ein neues Dateisystem auf dem Datenträger oder dem Volume anlegt. Zum Anlegen eines neuen Volumes kann man folgende Kürzel für das entsprechende Dateisystem verwenden:

  • »JHFS+«: Hierbei handelt es sich um das von Mac OS standardmäßige Dateisystem. Im Festplatten-Dienstprogramm wird ein solches Volume mit Mac OS Extended (Journaled) bezeichnet. Es kann auch »HFS+« angegeben werden, dann wird auf die Journaling Funktion des Dateisystems verzichtet.
  • »Case-sensitive Journaled HFS+«: Hier wird wiederum das Mac OS Standard Dateisystem verwendet, wobei bei Datei- und Verzeichnisnamen bei Gross- und Kleinschreibung unterschieden wird. Die Verwendung dieses Dateisystems wird allerdings nicht empfohlen, da einige Programme damit Probleme haben können.
  • »MS-DOS«: Das unter Windows und auf vielen Wechseldatenträgern gebräuchliche Dateisystem FAT wird verwendet.

Folgender Befehl löscht nun das Volume /Volumes/USB-STICK (/dev/disk5s1) und legt ein neues Volume mit dem Namen MyStick und dem Dateisystem HFS+ (Journaled) an:

$ diskutil eraseVolume "JHFS+" MyStick /dev/disk5s1 
Started erase on disk5s1 USB-STICK
Unmounting disk
Erasing
Initialized /dev/rdisk5s1 as a 2 GB HFS Plus volume with a 8192k journal
Mounting disk
Finished erase on disk5s1 MyStick

Des Weiteren kann das Kommando partitionDisk zu Erstellen von Partitionen verwendet werden. Hier werden allerdings etwas mehr mehr Information benötigt. Zunächst muss dem Kommando das Partitionsschema übergeben werden. Hier kämen die »Apple-Partitionstabelle« (→ APMFormat), die »GUID-Partitionstabelle« (→ GPTFormat) und der klassische »Master-Boot-Record« (→ MBRFormat) in Frage. Es gibt noch ein weiteres Partitionsschema, welches aber zunehmend an Bedeutung verliert → OS9Drivers. Dabei handelt es sich das APMFormat, wobei noch zusätzlich ein Treiber installiert wird, der für die Benutzung im klassischen MAc OS (zB OS 9) benötigt wird.

Der Angabe des Schemas folgt die Angabe des Dateisystemtyps (HFS+, MS-DOS etc), der Name des Volumes (zB MyStick im og Beispiel) und die gewünschte Grösse des Volumes. Werden mehr Volumes angelegt, kann die Grösse direkt durch die Angabe der Gigabytes (zB 10G für 10 Gigabyte) oder relativ in Prozent (zB 50%) erfolgen. Der folgende Befehl legt auf dem Device /dev/disk5 (mein USB-Stick) zwei gleich grosse Partitionen an (50%), wobei ein Volume HFS+ und das zweite MS-DOS (FAT) formatiert wird. Die Volumebezeichnung für das HFS+ Volume ist AppleStick und für das MS-DOS Volume WinStick. Das Partitionsschema wird GUID sein:

$ diskutil partitionDisk /dev/disk5 GPTFormat "HFS+" AppleStick 50% "MS-DOS" WinStick 50% 
Started partitioning on disk5
Unmounting disk
Creating partition map
Waiting for disks to reappear
Formatting disk5s1 as Mac OS Extended with name AppleStick
Formatting disk5s2 as MS-DOS (FAT) with name WinStick
Finished partitioning on disk5
/dev/disk5
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *2.0 GB     disk5
   1:                  Apple_HFS AppleStick              999.8 MB   disk5s1
   2:       Microsoft Basic Data WINSTICK                998.2 MB   disk5s2

Grosse der Partitionen verändern, Partitionen zusammenführen

Ein nachträgliches Ändern der Partitionstabelle ist zwar möglich, ist aber nie ohne Risiko. Sie sollten deshalb zuvor eine Sicherungskopie des Inhalts der betreffenden Partitionen anlegen. Ein Zusammenlegen zweier Partitionen ist nur dann möglich, wenn diese physikalisch nebeneinander liegen und es bleiben auch nur die Daten der ersten Partition erhalten! Ein mergePartitions und resizeVolumes ist nur auf fest angeschlossenen Festplatten möglich, Partitionen auf USB-Sticks oder USB-Festplatten können nicht oder nur mit Datenverlust in der Grösse verändert werden bzw. zusammen geführt werden!

Die Kommandos zum Verändern der Grösse eines Volumes sind zum Einem → resizeVolume, zum Zusammenführen zweier Volumes → mergePartitions und zum Teilen eines Volumes → splitPartition.

Der erste Befehl teilt die MS-DOS Partition in zwei gleich Partitionen auf. Eine Angabe in % ist hier leider nicht möglich, deshalb habe ich beiden Partitionen eine Grösse von 450MB zugewiesen. Da die gesamte Grösse des Volumes aber grösser ist als die Summe der dem Befehl übergebenen Grössen addiert diskutil den verbleibenden freien Speicher dem letzten Volume:

$ diskutil splitPartition /dev/disk5s2 "MS-DOS" WINSTICK1 450M "MS-DOS" WINSTICK2 450M  
Started partitioning on disk5s2 WINSTICK
Splitting
Unmounting disk
Waiting for disks to reappear
Formatting disk5s2 as MS-DOS (FAT) with name WINSTICK1
Formatting disk5s3 as MS-DOS (FAT) with name WINSTICK2
Finished partitioning on disk5s2 WINSTICK
/dev/disk5
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *2.0 GB     disk5
   1:                  Apple_HFS AppleStick              999.8 MB   disk5s1
   2:       Microsoft Basic Data WINSTICK1               449.8 MB   disk5s2
   3:       Microsoft Basic Data WINSTICK2               547.4 MB   disk5s3

Beim Zusammenfügen zweier Partitionen wird zunächst das Dateisystem der Partition angegeben die den Bereich der anderen Partition zugewiesen bekommt. Darauf folgt der Name der neuen Partition, dieser muss angegeben werden, obwohl diskutil diesen beim mergePartitions ignoriert. Dann geben Sie den Devicenamen der Partition an, die erhalten bleiben soll, gefolgt vom Devicenamen der Partition deren Speicherbereich verwendet werden soll.

Hinweis: Da das Zusammenführen zweier Partitionen nur bei fest angeschlossenen Datenträgern ohne Neuformatierung und somit ohne Datenverlust geht, ist die Ausgabe des folgendes Befehls auf einen USB-Stick zurückzuführen:

$ diskutil mergePartitions "MS-DOS" WIN /dev/disk5s2 /dev/disk5s3 
The chosen disk does not support resizing, do you wish to format instead? (y/N) y 
Merging partitions into a new partition
     Start partition: disk5s2 WINSTICK1
     Finish partition: disk5s3 WINSTICK2
Started partitioning on disk5
Merging partitions
Waiting for disks to reappear
Formatting disk5s2 as MS-DOS (FAT) with name WIN
Finished partitioning on disk5
/dev/disk5
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *2.0 GB     disk5
   1:                  Apple_HFS AppleStick              999.8 MB   disk5s1
   2:       Microsoft Basic Data WIN                     998.2 MB   disk5s2

Um nun die Grösse eines Volumes zu ändern, damit möglicherweise eine weitere Partition angelegt werden kann, wird das Kommando resizeVolume verwendet. Da es bei dem hier gezeigten Verfahren nicht möglich ist nachträglich freien Speicher einer neuen Partition zuzuweisen, sollten Sie die zweite Partition beim resizeVolume-Kommando gleich mit angeben. Dieses Verfahren kommt dann dem split-Kommando gleich, mit dem Unterschied, dass beim resizeVolume-Kommando die Daten der ersten Partition erhalten bleiben, sofern diese noch in die neue Grösse der Partition passen.

Hinweis: Da dieses Verfahren auf einem USB-Stick ebenfalls nicht möglich ist, zeige ich hier nur die Syntax des Befehls exemplarisch, denn ein reformat wie zB beim mergePartitions-Kommando ist beim resizeVolume-Kommando nicht vorgesehen:

$ diskutil resizeVolume /dev/disk5s2 25% 1 "MS-DOS" WIN 25% 
Volume format does not support resizing

pronto 2010/05/30 19:43

Zugriffsrechte überprüfen/reparieren

Es besteht sowohl im Festplatten-Dienstprogramm die Möglichkeit die Zugriffsrechte zu reparieren, wie natürlich auch im CLI Befehl diskutil. Das Kommando hierfür lautet verifyPermissions für die Überprüfung und repairPermissions für die ggf notwendige Reparatur:

$ diskutil verifyPermissions / 
Started verify/repair permissions on disk0s2 Macintosh HD
Permissions differ on "Applications/Safari.app/Contents/Info.plist", should be -rw-r--r-- , they are -rwxr-xr-x
Finished verify/repair permissions on disk0s2 Macintosh HD

$ diskutil repairPermissions / 
Started verify/repair permissions on disk0s2 Macintosh HD
Permissions differ on "Applications/Safari.app/Contents/Info.plist", should be -rw-r--r-- , they are -rwxr-xr-x 
Repaired "Applications/Safari.app/Contents/Info.plist"
Finished verify/repair permissions on disk0s2 Macintosh HD

Weitere Informationen bzgl der Überprüfung und Reparatur der Zugriffsrechte finden Sie im Artikel: -> Zugriffsrechte reparieren

Pronto 2010/07/27 18:17

Ownership auf einem Volume aktivieren

Im Gegensatz zu Volumes auf internen Festplatten werden auf Volumes auf externen Datenträgern (zB USB-Festplatten) Benutzerrechte nicht automatisch berücksichtigt. Das bedeutet, dass für die Objekte (File System Object → FSO) immer der aktuelle Benutzer, welcher das Volume eingehängt hat, Eigentümer des Objekts ist und somit auch Zugriff auf diese hat. Überprüfen können Sie diese Einstellung mit dem oben bereits gezeigten »info« Parameter des »diskutil« Kommandos:

$ diskutil info disk4s1
   Device Identifier:        disk4s1
   Device Node:              /dev/disk4s1
   Part Of Whole:            disk4
   Device / Media Name:      Untitled 1

   Volume Name:              USBSTICK
   Escaped with Unicode:     USBSTICK

   Mounted:                  Yes
   Mount Point:              /Volumes/USBSTICK
   Escaped with Unicode:     /Volumes/USBSTICK

   File System:              Journaled HFS+
   Type:                     hfs
   Name:                     Mac OS Extended (Journaled)
   Journal:                  Journal size 8192 KB at offset 0x11000
   Owners:                   Disabled

   Partition Type:           Apple_HFS
   Bootable:                 Not bootable
   Media Type:               Generic
   Protocol:                 USB
   SMART Status:             Not Supported
   Volume UUID:              71DA45FC-FAD2-3F1E-BC6E-4EA53474399B

   Total Size:               2.0 GB (1999567872 Bytes) (exactly 3905406 512-Byte-Blocks)
   Volume Free Space:        2.0 GB (1978003456 Bytes) (exactly 3863288 512-Byte-Blocks)

   Read-Only Media:          No
   Read-Only Volume:         No
   Ejectable:                Yes

   Whole:                    No
   Internal:                 No

Damit nun auf solchen Volumes die eingestellten Benutzerrechte auch greifen, kann man die »Ownerships« auf solchen Volumes aktivieren:

$ sudo diskutil enableOwnership disk4s1
Filesystem user/group ownership enabled

Der Status der Ownerships wird in der lokalen Volume Database »/var/db/volinfo.database« für jedes Volume hinterlegt und beim Remount entsprechend der Konfiguration eingestellt, dadurch hat diese Einstellung nur auf dem lokalen System Gültigkeit und die Ownerships werden auf einem anderen System weiterhin ignoriert!

Verwandte Artikel:
-> Debug Log im Festplattendienstprogramm

pronto 2011/09/19 13:30

mac/diskutil.txt (27410 views) · Zuletzt geändert: 2014/12/15 11:15 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0