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]
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
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
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
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:
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
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
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
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