2012-04-09 9 views
6

Ich möchte einige Daten auf der Festplatte in Linux speichern. Ich möchte, dass diese Daten in einem kontinuierlichen Festplattenblock auf der physischen Festplatte gespeichert werden. Wenn ich diese Daten in eine normale Datei schreibe, ist der Block, den die Datei belegt, möglicherweise nicht auf der physischen Festplatte fortlaufend. Gibt es eine Möglichkeit, diesen Job zu machen?wie eine Datei in einem kontinuierlichen Festplattenblock in Linux speichern

+2

Warum? Was versuchst du zu erreichen? – Hasturkun

Antwort

7

Festplattenpartitionen sind kontinuierliche Bereiche einer Festplatte.

So eine Möglichkeit zu tun, was Sie tun möchten, ist Ihre Festplattenpartitionen, um die Größe und eine neue mit gparted (gnome) oder partition (kde) oder ein ähnliches erstellen - eine angemessene Größe für die Datei.

Sie können dann direkt an Ihre neue Partition schreiben (nicht verwendet und ein Dateisystem zu umgehen), indem Sie die Datei mit:

/dev/sdxn 

Wo Angabe SDXn = {sda1, sda2, ..., sdb1, ... ...} usw. ist der Buchstabe/die Nummer der Partition.

Alternativ können Sie beiseite legen eine ganze Festplatte durch direkt an sie zu schreiben (unter Umgehung alltogether Partitionstabelle) unter Verwendung der Datei:

/dev/sdx 

Wo sdx = {sda, sdb, sdc, ...} usw. ist der Buchstabe der Festplatte.

Warnung: Machen Sie keinen Tippfehler und schreiben Sie an den falschen (der ein Dateisystem hat) oder Sie werden es verfälschen. Am besten machen Sie einen symbolischen Link ln -s/dev/sdxn/home/fred/mydata und schreiben Sie dann immer in die mydata-Datei.

3

Der Dateisystemcode (innerhalb des Kernels, z. B. in linux-3.1.6/fs/ext4/ für ext4-Dateisysteme innerhalb der linux-3.1.6-Kernel-Quelle) verwaltet die für eine bestimmte Datei verwendeten Plattenblöcke. Sie können die Festplattenblöcke einiger Ihrer Dateien nicht selbst organisieren. Sie können dem Kernel jedoch einige Hinweise geben, indem Sie seltsame Systemaufrufe verwenden.

Wenn Sie das nicht mögen, könnten Sie das Dateisystem alle zusammen vermeiden, indem Sie direkt auf eine unmounted Partition, z. write(2) syscalls zu einem Dateideskriptor, der von open(2) erhalten wird, z. B. /dev/sda2; Aber wenn Sie nicht wirklich wissen, was Sie tun (und die Formulierung Ihrer Frage gibt mir das Gefühl, dass Sie die genaue Rolle von Dateisystemen nicht verstehen), werde ich das nicht empfehlen.

Kernel-Dateisystem-Code ist ziemlich gut, und Kernel-Dateisystem-Cache ist sehr effizient.

Wenn Sie Ihre Lesevorgänge beschleunigen möchten, sollten Sie in Betracht ziehen, readahead(2) oder oder madvise(2) Systemaufrufe zu verwenden.

Sie könnten auch, wenn Sie Ihr Dateisystem erstellen, es für Ihre speziellen Zwecke tunen. Zum Beispiel, wenn Sie wissen, dass Sie meist recht große Dateien darin haben, können Sie eine größere als Standard-Blockgröße (zB mke2fs -b 8192) verwenden, etc ...

Aber denken Sie nicht, dass Software-Tricks würden drehzahl- deutlich Ihre Anwendung erhöhen; Wenn Sie viel Festplatten-IO machen, ist der eigentliche Engpass die Hardware (daher ist die Verwendung von SSD anstelle von Festplatten einfacher).

+0

Es stellt sich heraus, dass EXT4 eine maximale Größe von 128MiB hat, daher können Dateien, die größer sind als EXT4, bei EXT4 nicht zusammenhängend sein. Diese Hinweise, die du erwähnst - gibt es irgendwelche "seltsamen" Systemaufrufe, um den Kernel beim Schreiben anzudeuten? Oder vielleicht, um eine zusammenhängende Datei von Nullen zuzuweisen, auf die dann geschrieben werden kann. Ich werde dies auf FAT32 für LiveCD-ISO-Dateien (normalerweise ~ 700MiB) tun (http://unix.stackexchange.com/questions/80072/contiguous-copy-how-do-i-copy-files-contigigious)) und vorzugsweise auch auf einem '* nix'-Dateisystem. –

3

Sie können das nicht an ein normales Dateisystem fragen.

Wenn Sie aus irgendeinem Grund zusammenhängende Daten auf dem Datenträger speichern möchten, müssen Sie ein (kostenloses) Raw-Gerät verwenden und das Datenlayout darauf verwalten. Dies tun einige Datenbanken. Beachten Sie, dass selbst in diesem Fall keine Garantie besteht, dass die Blöcke zusammenhängend sind. Das Gerät kann von einer Hardware- oder Software-RAID-Schicht bereitgestellt werden oder ein zvol aus einem ZFS-Pool sein.

Verwandte Themen