Wie erstellt man in OS X einen Hardlink (im Gegensatz zu einem Symlink oder einem Mac OS-Alias), der auf ein Verzeichnis verweist? Ich kenne bereits den Befehl "ln target destination", aber der funktioniert nur, wenn das Ziel eine Datei ist. Ich weiß, dass Mac OS im Gegensatz zu anderen Unix-Umgebungen Hardlinks zu Ordnern zulässt (dies wird z. B. für Time Machine verwendet), aber ich weiß nicht, wie ich es selbst machen kann.
Antworten
Zu viele Anzeigen?Ich stimme zu, dass die feste Verknüpfung von Ordnern/Verzeichnissen Probleme verursachen kann, wenn man nicht aufpasst, aber sie hat einen ganz klaren Vorteil - Time Machine ist ein perfektes Beispiel dafür. Ohne sie wäre es einfach nicht praktikabel, da die Vervielfältigung redundanter Dateiversionen selbst die größten Festplatten sehr schnell aufbrauchen würde.
Snow Leopard kann feste Links zu Verzeichnissen erstellen, wenn Sie die sechs Regeln von Amit Singh befolgen:
- Das Dateisystem muss HFS+ mit Journal sein.
- Die übergeordneten Verzeichnisse von Quelle und Ziel müssen unterschiedlich sein.
- Das übergeordnete Verzeichnis der Quelle darf nicht das Root-Verzeichnis sein.
- Das Ziel darf sich nicht im Root-Verzeichnis befinden.
- Das Ziel darf kein Nachkomme der Quelle sein.
- Das Ziel darf keinen Vorgänger haben, der ein Verzeichnis-Hardlink ist.
Es ist also keineswegs richtig, dass Snow Leopard die Möglichkeit verloren hat, feste Links zu Ordnern zu erstellen.
Ich habe mich gerade vergewissert, dass link/unlink unter Snow Leopard funktioniert - solange man die sechs Regeln befolgt. Ich habe es gerade ausprobiert und es funktioniert einwandfrei auf meinem Snow Leopard 10.6.6 System - ich habe es auf dem Boot-Volume und auf einem separaten externen USB-Volume ausprobiert und es funktionierte in beiden Fällen einwandfrei.
Hier ist das Programm "hunlink.c":
#include <stdio.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
if (argc != 2)
return 1;
int ret = unlink(argv[1]);
if (ret != 0)
perror("unlink");
return ret;
}
gcc -o hunlink hunlink.c
Seien Sie also vorsichtig, wenn Sie es versuchen - denken Sie daran, die Regeln zu befolgen und hlink zu verwenden, um diese harten Links zu erstellen und hunlink zu verwenden, um den harten Link danach zu entfernen. Und vergessen Sie nicht zu dokumentieren was Sie getan haben, für später oder für jemand anderen, der das vielleicht wissen muss.
Ein weiteres "Problem", das ich gerade über diese "harten Links" zu Ordnern gelernt habe. Wenn man sie erstellt, passiert wirklich eine Menge "hinter dem Vorhang" von Mac OS X. Ein wirklich wichtiger Punkt ist, dass der Ordner, zu dem Sie den Link erstellen, in Wirklichkeit in einen super-magischen, super-versteckten Ordner namens /.HFS+ Private Directory Data%000d/dir_xxx verschoben wird, wobei xxx die Inode-Nummer des "Quellordners" ist - denken Sie daran, dass das Format des Befehls lautet
hlink source_folder target_folder
Aus diesem Grund müssen Sie darauf achten, dass Sie keine Dateien im "source_folder" geöffnet haben, denn wenn Sie dies tun, werden sie einfach in den super-magischen Ordner verschoben und Sie werden wahrscheinlich ein Problem haben, wenn Sie versuchen, Änderungen an diesen Dateien zu speichern, die im "source_folder" geöffnet waren. Das ist mir ein paar Mal passiert, bis mir klar wurde, was da passiert ist, und die Lösung ist ziemlich einfach. Mir fiel auf, dass man den Befehl "ls -la" nicht mehr ausführen konnte, ohne komische Fehlermeldungen für alle Ordner/Verzeichnisse zu erhalten, die sich im ursprünglichen "source_folder" befanden, aber man konnte einen "ls"-Befehl ausführen und alles sah gut aus.
Wenn Sie "Datenträger überprüfen" im "Festplattendienstprogramm" ausführen, werden Sie feststellen, dass es sich wahrscheinlich beschwert und die Meldung "Volume bitmap needs minor repair for orphaned blocks" ausgibt, was gerade bei der Erstellung des supermagischen Ordners und der Verschiebung des "source_folder" dorthin passiert ist.
Wenn Sie sich in dieser Situation mit "verwaisten Blöcken" befinden, speichern Sie die geänderten Dateien zunächst an einem anderen temporären Speicherort, der sich nicht auf dem Volume mit dem "Quellordner" befindet, und verwenden Sie dann das "Festplattendienstprogramm", um das Volume mit dem "Quellordner" aus- und wieder einzuhängen, oder starten Sie den Computer neu. Kopieren Sie dann die Dateien, die Sie an den temporären Speicherorten gespeichert haben, zurück an ihren ursprünglichen Speicherort, und Sie sollten wieder arbeiten können. So hat es bei mir funktioniert, ich kann also nicht garantieren, dass es auch bei Ihnen funktioniert. Es könnte also eine gute Idee sein, dies auf einem Datenträger auszuprobieren, von dem Sie ein gutes Backup haben, nur für den Fall.
Es erscheint sehr seltsam, dass all dieser Aufwand nur für die einfache Aufgabe der Erstellung einer festen Verknüpfung zu einem Ordner anfällt. Hat irgendjemand eine Idee, warum Mac OS X sich so viel Mühe mit der Erstellung von Verknüpfungen zu Ordnern macht? Hat es etwas mit der Tatsache zu tun, dass es sich um ein "Journaled"-Dateisystem handelt?
Ich entdeckte die Informationen über den super-magischen, super-versteckten Ort, indem ich Amit Singhs Erklärung seines "hfsdebug"-Werkzeugs las. Weitere Einzelheiten finden Sie auf seiner Website unter Das hfsdebug-Dienstprogramm von Amit Singh . Es ist eine sehr interessante Software, die Ihnen viele Details über HFS+-Dateisysteme verrät. Es ist kostenlos und ich empfehle Ihnen, es herunterzuladen und auszuprobieren. Es wird nicht mehr unterstützt, aber es funktioniert immer noch sowohl auf Snow Leopard als auch auf Leopard - im Grunde auf jedem HFS+ unterstützten System. Sie können damit nicht wirklich Schaden anrichten, da es ein "Nur-Lese"-Werkzeug ist - es ist also gut geeignet, um einige Details des Dateisystems zu betrachten.
Ein weiteres Problem mit diesen "festen Verknüpfungen zu Ordnern": Sobald Sie eine solche Verknüpfung erstellen und der super-magische, super-geheime Ordner erstellt wird, ist er für immer da. Selbst wenn Sie die Verknüpfung mit dem Ordner, der die Erstellung verursacht hat, aufheben, bleibt dieser magische Ordner bestehen. Ich bin mir nicht sicher, warum, aber es ist definitiv so. Sie können "hfsdebug" verwenden, um dies herauszufinden, wenn Sie es ausprobieren möchten. Sie können auch "hfsdebug" verwenden, um herauszufinden, wie viele dieser "harten Links zu Ordnern" auf einem Laufwerk existieren. Diese Details finden Sie in Amits Artikel über das Dienstprogramm "hfsdebug".
Er hat auch ein anderes, neueres Dienstprogramm, das unterstützt wird, aber kostet. Es heißt fileXray und kostet $79 für eine Person und eine beliebige Anzahl von Computern im selben Haushalt für eine persönliche, nicht-betriebliche Lizenz. Es hat ein ausführliches 173-seitiges Benutzerhandbuch, das Sie herunterladen können, um zu sehen, was es tun kann, bevor Sie es kaufen. Leider gibt es keine Testversion, also lesen Sie das Handbuch und informieren Sie sich auf der Website über weitere Einzelheiten, um herauszufinden, ob das Programm Ihnen aus der Patsche helfen kann. Alle Einzelheiten finden Sie auf der Website des Unternehmens - siehe fileXray-Website für weitere Informationen.
Es gibt einige Probleme, die Sie bei der Verwendung dieser harten Links zu Ordnern beachten sollten. Wenn das Volume, auf dem sie erstellt werden, an einen entfernten Client gemountet wird, kann es zu erheblichen Problemen kommen, je nachdem, wie sie gemountet werden. Wenn Sie AFP verwenden, um das Volume an einen entfernten Client zu mounten, gibt es große Probleme, da jeder Ordner, der derzeit einen Hardlink hat oder jemals einen hatte, aber später entfernt wurde, nicht mehr verwendet werden kann, da alle untergeordneten Ordner (aber keine Dateien) weder vom Finder noch von einem Terminalfenster aus zugänglich sind. Wenn Sie versuchen, einen einfachen "ls -lR"-Befehl auszuführen, wird dieser fehlschlagen und Ihnen die Fehlermeldung "ls: xxx: No such file or directory" Fehlermeldungen für alle untergeordneten Verzeichnisse. Wenn Sie ein Finder-Fenster verwenden, um den Verzeichnisbaum des entfernten Datenträgers zu durchsuchen, werden die Ordner, die sich in dem Ordner befinden, der einen Hardlink zu ihm hatte oder hat, einfach ohne Fehler verschwinden, wenn Sie das erste Mal auf den Ordnernamen klicken.
Diese Probleme scheinen nicht aufzutreten (abgesehen von der Fehlermeldung), wenn Sie NFS verwenden, um den entfernten Client zu mounten (und vorausgesetzt, Sie haben einen NFS-Server auf dem System, der das Volume als lokales HFS+-Dateisystem hat). Details zur Verwendung von NFS zum Einbinden von Volumes werden hier nicht beschrieben. Ich habe ein nettes Programm von Dr. Marcel Bresink namens "NFS Manager" benutzt, um bei den NFS-Verbindungen auf dem Server und dem Client zu helfen. Sie können es von seiner Website beziehen - suchen Sie einfach nach "Bresink NFS Manager" in Ihrer bevorzugten Suchmaschine, aber er hat eine kostenlose Testversion, damit Sie es ausprobieren können, bevor Sie es kaufen. Es ist keine große Sache, wenn Sie lernen wollen, wie man NFS-Verbindungen herstellt, aber der "NFS Manager" macht es ziemlich einfach, die Dinge einzurichten und all die verschiedenen Einstellungen zu verändern, um sie zu optimieren. Er hat auch einige andere nette Mac OS X-Dienstprogramme, die sehr preiswert sind - eines davon heißt "Hardware Monitor", mit dem Sie alle möglichen Dinge wie Stromverbrauch, CPU-Temperatur, Lüftergeschwindigkeit und viele andere Variablen sowohl für das lokale als auch für das entfernte Mac-System über längere Zeiträume (von Minuten bis Tagen) überwachen und grafisch darstellen können. Auf jeden Fall einen Blick wert, wenn Sie sich für praktische Dienstprogramme interessieren.
Eine Sache, die mir aufgefallen ist, ist, dass NFS-Dateiübertragungen etwa 20 % langsamer waren als solche über AFP, aber das kann variieren, also gibt es keine Garantie für das eine oder das andere, aber ich habe lieber etwas, das funktioniert, selbst wenn ich 20 % Leistungseinbußen in Kauf nehmen muss, als dass überhaupt nichts funktioniert.
Apple ist sich der Probleme mit Hardlinks und entfernten AFP-Dateisystemen bewußt, und sie bezeichnen es als eine "Implentationsbeschränkung" des AFP-Clients - ich ziehe es vor, es als das zu bezeichnen, was es für mich wirklich zu sein scheint - ein BUG!!! Ich kann nur hoffen, dass die nächste Version von Mac OS X das Problem behebt, denn ich mag die Möglichkeit, harte Links zu Ordnern zu verwenden, wenn es sinnvoll ist.
Diese Notizen sind meine persönliche Meinung und ich übernehme keine Garantie für ihre Richtigkeit; die Verwendung erfolgt auf eigene Gefahr. Machen Sie ein gutes Backup, bevor Sie mit diesen "harten Links zu Ordnern" herumspielen, für den Fall, dass etwas Unvorhergesehenes passiert. Aber ich wünsche Ihnen viel Spaß, wenn Sie sich dazu entschließen, sich mit diesem interessanten Aspekt von Mac OS X näher zu befassen.
Sie können es dann nicht direkt in BASH tun. Allerdings... Ich habe hier einen Artikel gefunden, der beschreibt, wie man es indirekt machen kann: http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html indem Sie ein einfaches kleines C-Programm kompilieren:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc != 3) return 1;
int ret = link(argv[1], argv[2]);
if (ret != 0) perror("link");
return ret;
}
...und bauen in Terminal.app mit:
$ gcc -o hlink hlink.c -Wall
Blödsinn. Unter 10.5 heißt es in der Manpage für ln :
-d, -F, --directory
allow the superuser to attempt to hard link directories (note:
will probably fail due to system restrictions, even for the
superuser)
Also ja:
sudo ln -d existing_dir new_hard_link
Geben Sie Ihr Passwort ein, und Sie sind noch nicht fertig . Sie haben es nicht dokumentiert, oder? Sie muss fest verknüpfte Verzeichnisse dokumentieren, auch wenn es sich um einen Einzelplatzrechner handelt.
Das Löschen ist eine andere Sache: Wenn Sie es auf die übliche Art und Weise tun, wie Sie Verzeichnisse löschen, löschen Sie den Inhalt. Sie müssen also muss das Verzeichnis "entkoppeln":
unlink new_hard_link
Dort. Hoffentlich machen Sie Ihr Dateisystem nicht kaputt!
Cross-Posting dieses großartige Instrument die das Problem auf elegante Weise löst, ursprünglich veröffentlicht von Sam :
Um Hardlink zu installieren, stellen Sie sicher, dass Sie Folgendes installiert haben selbstgebaut und dann ausführen:
brew install hardlink-osx
Nach der Installation erstellen Sie eine feste Verknüpfung mit:
hln [source] [destination]
Ich habe auch festgestellt, dass unlink
Befehl funktioniert nicht unter Snow Leopard, daher habe ich eine Option zum Entkoppeln hinzugefügt:
hln -u destination
Der Code ist auf Github für alle Interessierten verfügbar: https://github.com/selkhateeb/hardlink
Ja, es wird vom Kernel und dem Dateisystem unterstützt, aber da es nicht für den allgemeinen Gebrauch gedacht ist, ist es der Shell nicht zugänglich.
Sie könnten wahrscheinlich herausfinden, welche APIs Time Machine verwendet, und sie in ein Befehlszeilentool verpacken, aber es wäre besser, den Hinweis zu beherzigen und einen großen Bogen zu machen.
- See previous answers
- Weitere Antworten anzeigen