Ist es möglich, eine Datei und einen Hardlink darauf zu erstellen, ohne die Daten zu initialisieren?


0

Ich möchte eine Datei mit 2 GB erstellen, aber der Inhalt ist mir egal. Ich verwende derzeit dd mit /dev/zero, aber das ist ziemlich langsam.

Ist es möglich, eine Datei und einen Hardlink darauf zu erstellen, ohne den Inhalt der Datei zu initialisieren (sie enthält möglicherweise Mülldaten, die sich an diesem Ort auf der Festplatte befanden)?

Hinweis: Ich möchte es wirklich zuteilen der Speicher. Ich möchte keine spärliche Datei.


Du musst es erklären Warum Sie möchten eine Datei schnell zuordnen, aber eine spärliche Datei wird nicht das tun, was Sie suchen. Sie könnten möglicherweise eine spärliche Datei byteweise kopieren, um eine vollständige Datei mit Nullen zu erstellen, und ich kann nicht erkennen, warum Ihre Anforderung speziell für "Speicherdaten" gilt.
Mokubai

Antworten:


1

Worauf Sie sich beziehen, wird als "spärliche" Datei bezeichnet.

Von diese Seite

Sparse-Dateien sind im Grunde wie jede andere Datei, nur dass Blöcke, die nur Nullen enthalten (d. H. Nichts), nicht tatsächlich auf der Festplatte gespeichert werden. Dies bedeutet, dass Sie eine scheinbar 16G-Datei haben können - mit 16G "Daten" -, die nur 1G Speicherplatz auf der Festplatte beansprucht.

So erstellen Sie eine mit dd du kannst den ... benutzen seek= Parameter:

dd if=/dev/zero of=sparse-file bs=1 count=1 seek=1024k

Das seek und bs parameters sagt ihm einfach, nach einem Block bis zum Ende der Datei zu suchen, was eine spärliche Datei ergibt, zu der Sie dann einen Hotlink setzen können, wenn Sie möchten.

Dadurch erhalten Sie eine vollständig leere Datei, die keinen Speicherplatz auf der Festplatte belegt, bis sie tatsächlich geschrieben wird. Seine Erstellung sollte auch fast augenblicklich sein.

- = EDIT = -

Wenn Sie eine Datei zuweisen möchten und sich nicht für den Inhalt interessieren, bis Sie schreiben, benötigen Sie eine spärliche Datei. Aus Gründen der Dateisystemsicherheit wird es jedoch als "schlechtes Formular" angesehen, wenn eine nicht privilegierte Anwendung eine Datei erstellen darf, die bereits Daten verwendet existiert auf der Festplatte.

Dies liegt daran, dass, wenn eine Userland-Anwendung dies tun könnte, möglicherweise vertrauliche Daten von anderen Benutzern verfügbar gemacht werden könnten, indem eine Datei mit der Größe des gesamten freien Speicherplatzes auf einer Festplatte zugewiesen wird und durch sie hindurch durchsucht wird, wobei nach Passwörtern und anderen vertraulichen Daten gesucht wird, die ein anderer Benutzer möglicherweise gespeichert hat kopiert oder gelöscht.

Dies ist ein explizit schlechter Entwurf in Betriebssystemen, die sich selbst als sicher betrachten möchten und kein modernes Mehrbenutzer-Betriebssystem dies tun kann.

Dies ist der andere Grund, warum Dateien mit geringer Dichte beim Lesen standardmäßig auf Null gesetzt werden, anstatt einen Plattenbereich zuordnen zu dürfen.

Wenn Sie schnell eine Datei mit beliebigen Daten erstellen möchten, ohne Blöcke vorher zuzuordnen, benötigen Sie eine spärliche Datei. Wenn Sie diese Blöcke tatsächlich zuordnen möchten, müssen Sie explizit schreiben etwas in sie.


Der Punkt ist nicht das Erstellen einer spärlichen Datei, sondern das Zuordnen der Daten.
daknøk

@ RadekSlupik Ich habe meine Antwort bearbeitet.
Mokubai

0

Es könnte sein, was Sie brauchen, sofortige Rohdatei:

qemu-img create yourfile.img 2G
Formatting 'yourfile.img', fmt=raw size=2147483648

$ls -all
-rw-r--r--  1 mugen users 2147483648 Aug  8 23:48 yourfile.img

Mokubai: "Dies ist so, weil eine Benutzeranwendung dies tun könnte   Setzen Sie a. sensible Daten von anderen Benutzern möglicherweise offen   Datei die Größe des gesamten freien Speicherplatzes auf einer Festplatte und durchlaufen diese   Suchen nach Passwörtern und anderen vertraulichen Daten, die ein anderer Benutzer verwenden kann   gespeichert, kopiert oder gelöscht haben. Dies wird als explizit schlechtes Design betrachtet   in Betriebssystemen, die sich selbst gerne als sicher und nein verstehen   Dies wird durch ein modernes Mehrbenutzer-Betriebssystem erreicht. "

Das ist in der Tat so shred wurde erfunden.


Dies entspricht einer spärlichen Datei: Qemu-Dokumentation "raw (default) Das Rohformat ist ein einfaches Binärbild des Disk - Images und sehr portabel. Bei Dateisystemen, die Dateien mit geringer Dichte unterstützen, verwenden Bilder in diesem Format nur den tatsächlich von den darin aufgezeichneten Daten belegten Speicherplatz. "
Mokubai

Vielen Dank, dass Sie darauf hingewiesen haben, ich habe geraten, aber jetzt bin ich mir sicher, dass qemu Dateien mit geringer Dichte erstellt. +1
okobaka

Wer hat also einen Weg gefunden, diesen Müllschatz zu lesen?
okobaka
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.