PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Win 7 - Ordner mit sehr vielen Datein verwalten


-Scud-
2017-02-27, 11:54:52
Hallo Forum,

ich habe hier aus einer Datenwiedersterstellung einen Ordner mit 2,5 mio Datein. Größe 547GB. Zu 99% Datenschrott, aber ein paar brauchbare Sachen sind zu finden.

Mein Problem ist, dass es nach dem Öffnen des Ordners erstmal 10 min braucht bevor irgendwas geht. Eine gezielte Datensuche ist sehr langwierig und irgendwann pegelt sich die CPU Auslastung bei 100% ein, der RAM ist voll und nix geht mehr, Explorer kackt ab.

Gibt es eine Möglichkeit/ein Programm mit dem ich den Ordner 10 oder 20 kleiner aufteilen kann? Damit Windows nicht erst ewig mit Dateien auslesen beschäftig ist, wenn der Ordner geöffnet wird?

Danke und Grüße!

Hacki_P3D
2017-02-27, 13:15:52
Welches Motherboard hast Du genau?
Das Verhalten ist nicht so ganz normal, irgendein Treiber spackt da rum..

Gebrechlichkeit
2017-02-27, 13:29:43
Scheint als haettest Du die Partition/Platte falsch formatiert. Je nachdem was man vorhat, sollte man die Allocation Unit Groesse entsprechend auswaehlen:

ab 16kb fuer grosse Dateien, darunter 512/1024/4096 fuer System Platten bzw. Fotos (keine Raw)/Musik. Schmeiss den Windows Explorer Sucher in die Tonne und installiere Everything (http://www.voidtools.com/) < das ist ein must have Tool (gibt es auch in einer portable Variante).

-Scud-
2017-02-27, 13:59:00
Welches Motherboard hast Du genau?
Das Verhalten ist nicht so ganz normal, irgendein Treiber spackt da rum..

ASUS K87-K

Scheint als haettest Du die Partition/Platte falsch formatiert. Je nachdem was man vorhat, sollte man die Allocation Unit Groesse entsprechend auswaehlen:

ab 16kb fuer grosse Dateien, darunter 512/1024/4096 fuer System Platten bzw. Fotos (keine Raw)/Musik. Schmeiss den Windows Explorer Sucher in die Tonne und installiere Everything (http://www.voidtools.com/) < das ist ein must have Tool (gibt es auch in einer portable Variante).


Das Tool hängt sich beim anpeilen des o.g. Ordners auf. :confused:
Edith: Nach kurzer Zeit kann ich aber ohne Probleme im Ordner arbeiten. Läuft soweit.

fsutil fsinfo ntfsinfo e: [...]
Bytes pro Cluster : 4096


Müsste also passen.

DerRob
2017-02-27, 14:05:27
Liegen die Dateien auf einer Festplatte oder SSD?

Ich würde mir da erstmal eine kleine Batch-Datei erstellen, um die Dateien etwas zu verteilen:

move x:\daten\a*.* x:\daten-neu\a\
move x:\daten\b*.* x:\daten-neu\b\
move x:\daten\c*.* x:\daten-neu\c\
move x:\daten\d*.* x:\daten-neu\d\
...usw.

ravage
2017-02-27, 14:05:56
Versuche mal mit dem DOS Fenster auf den Ordner zuzugreifen. Das sollte deutlich schneller gehen. Darüber kannst du auch suchen und ggf noch brauchbare Dateien woanders hin kopieren.

Gast
2017-02-27, 16:24:55
Edith: Nach kurzer Zeit kann ich aber ohne Probleme im Ordner arbeiten. Läuft soweit.

fsutil fsinfo ntfsinfo e: [...]
Bytes pro Cluster : 4096


Müsste also passen.

Alternative waere z.B der Einsatz von Cathy und Co. Damit die Platte "indexen" lassen und dann im Programm nach der entsprechenden Dateien suchen. Ich empfehle VVV (http://vvvapp.sourceforge.net/ ; nimm die 1.2 Version, die 1.3 ist bei mir irgendwie buggy bzw. kann nicht ohne Probleme 3tB+ Platten indexen wenn man grad gleichzeitig darauf zugreift).

Hat man einmal die Datei, formatiert man die Platte. Evtl. lohnt sich der Kaese/Aufwand gar nicht, wenn man bereits weiss das 99% der Dateien nutzlos sind :) Wie gesagt, ansonsten mit VVV/Cathy die Platte scannen und dann nach der Datei suchen. In VVV immer ein "zu suchende datei/name (dank des "Gaensefuesschen limitiert man die suche auf genau das was man will, ansonsten wird alles aufgelistet was "so aenhlich lautet" wie die Datei/Film etc.).

Hacki_P3D
2017-02-27, 16:53:24
ASUS K87-K



Ok..da ist zumindest mal kein "Killer" LAN Chip verbaut :)

Würde mit Poolmon schauen, wer da sein Unfug treibt:

http://www.migo-it-blog.de/2013/12/windows-8-arbeitsspeicher-laeuft-aus-unerklaerlichen-gruenden-voll/

Birdman
2017-02-27, 18:19:03
Also grundsätzlich ist mal alles >50k Dateien in einer Flat-File Struktur, unter jedem OS und Filesystem ein Graus.
Der Windows Explorer macht diesen Umstand zusätzlich natürlich nicht besser, da der u.A. noch versucht für jede Datei ein Preview Bild zu erzeugen und die Dateien sinnvoll zu sortieren.

Bis ~250k Dateien kann man mit viel Geduld noch den Explorer verwenden, aber da sind dann minutenlange Wartezeiten nicht ungewöhnlich, auch wenn der ganze shit auf einer SSD lagert.
Ich nehme daher immer die cmd line wenn ich solche Spässe antreffe, aber auch da muss man dann minutenlang warten, wenn man wirklich Operationen durchführt. (list, copy, move, delete)

seba86
2017-02-28, 10:24:26
Total Commander müsste erheblich schneller gehen, da es auch direkt auf die Datei-Ebene schreibt und nicht wie der Explorer über einen (Win32?)-Wrapper geht...

EDIT: Bei Total Commander geht es NOCH schneller, wenn man z.B. bei allen Exe-Dateien die gleichen Symbole zuweist (so liest er nicht jede einzelne Datei ab)

Generell gilt auch: Das erste Einlesen dauert ewig.

Aber selbst deine 2.5 Million Dateien sind nach der ersten Suche komplett im RAM und jede weitere Operation geht ruckzuck durch. Ich vermute sogar (ist zu 95% daneben ;) ), dass bis einige 10.000 Dateien fast im L2/L3/Ln Cache passen, da dort diverse Aktionen unmittelbar/sofort auf Klick reagieren.

Andi_669
2017-02-28, 10:50:30
ich habe mein Win so das alle Ordner nur auf Allgemeine Elemente eingestellt (https://www.antary.de/2009/12/31/windows-7-ordneransicht-fuer-alle-ordner-setzen/) sind, dann versucht der Explorer auch nicht mehr von jeden Bild oder Video einen Vorschau zu erzeugen,

Rooter
2017-03-04, 13:43:06
ich habe mein Win so das alle Ordner nur auf Allgemeine Elemente eingestellt (https://www.antary.de/2009/12/31/windows-7-ordneransicht-fuer-alle-ordner-setzen/) sind, dann versucht der Explorer auch nicht mehr von jeden Bild oder Video einen Vorschau zu erzeugen,Die Einstellung gibt's übrigens auch beim Total Commander, in den Einstellungen unter "Symbole".

MfG
Rooter

myMind
2017-03-05, 11:49:23
Wenn es um Datenwiederherstellung wichtiger Daten geht, würde ich dringend empfehlen den aktuell wiederhergestellten Arbeitsstand erst einmal zu sichern.
Alles Weitere ohne Gewähr.

Mit normalen Arbeitsmitteln wie Explorer und Co. kommt man bei 2,5 Mio Dateien nicht mehr weiter.

Folgendes Powershell-Skript verschiebt die Dateien in Unterverzeichnisse.
In der Parametersektion musst Du sourceDirectory und targetBaseDirectory an deinen Fall anpassen. Das sourceDirectory ist das Verzeichnis mit den 2,5 Mio Dateien. Im targetBaseDirectory werden die Unterverzeichnisse angelegt.
Es werden jeweils fileBunchCount Dateien in ein Unterverzeichnis verschoben.

$ErrorActionPreference = "Stop"

#
# Parameters
#

# The direcotry containing the files to move
$sourceDirectory = "C:\Tests\Testrun"
# The target base directory. Sub-Directories will be created here.
$targetBaseDirectory = "C:\Tests\Output"
# The number of files moved into each target directory
$fileBunchCount = 10000

#
# Create a timestamp for logging purposes
#
function Get-TimeStamp {
$timeStamp = "[" + (Get-Date).ToShortDateString() + " " + ((Get-Date).ToShortTimeString()) + "]"
Return $timeStamp
}

#
# Creates the directory where the subdirectories will be created.
#
function Create-Targetbasedirectory {
# Create the base directory
if(-Not (Test-Path $targetBaseDirectory)) {
New-Item $targetBaseDirectory -type directory
}
}

#
# Moves the files into subdirectories of the base directory.
#
function Move-FilesToTargetdirectory {
$dirCounter = 0
$fileCounter = 0
foreach ($filepath in [System.IO.Directory]::EnumerateFiles($sourceDirectory, '*.*')) {
$file = New-Object System.IO.FileInfo($filepath)
# Change the target directory after fileBunchCount move operations
if($fileCounter % $fileBunchCount -eq 0) {
# Skip existing target directory names
do {
$dirCounter++
$targetDirectory = $targetBaseDirectory + "\" + $dirCounter.ToString("0000000")
} while (Test-Path $targetDirectory)
Write-Output "Target directory $targetDirectory"
# Create target directory
New-Item $targetDirectory -type directory
Write-Output "$(Get-TimeStamp) Moving next bunch to $targetDirectory."
}
# Move a file
Move-Item $file.FullName -Destination $targetDirectory
$fileCounter++
}
}

Create-Targetbasedirectory
Move-FilesToTargetdirectory
Write-Output "$(Get-TimeStamp) Done."


Wenn Du das Ganze vorher testen willst, kannst Du mit folgendem Skript Testdateien erzeugen.
Es erstellt $fileCount Dateien im Verzeichnis $testDirectory. Alle 10000 Dateien wird eine Logausgabe geschrieben.

$ErrorActionPreference = "Stop"

function Get-TimeStamp {
$timeStamp = "[" + (Get-Date).ToShortDateString() + " " + ((Get-Date).ToShortTimeString()) + "]"
Return $timeStamp
}

$testDirectory = "C:\Tests\Testrun"
$fileCount = 1000000

if(-Not (Test-Path $testDirectory)) {
New-Item $testDirectory -type directory
}

$highestNumber = 0
$number = 0
foreach ($filepath in [System.IO.Directory]::EnumerateFiles($testDirectory, '*.*')) {
$currentFile = New-Object System.IO.FileInfo($filepath)
#new_file_0000001.txt"
#Write-Output "$(Get-TimeStamp) Current filename: $($currentFile.Name)"
if($currentFile.Name.Length -ne 20) {
continue
}
$numberAsString = $currentFile.Name.Substring(9, 7)
$number = [int]$numberAsString
if($number -gt $currentNumber) {
$highestNumber = $number
#Write-Output "$(Get-TimeStamp) Highest Number: $highestNumber"
}
}

Write-Output "$(Get-TimeStamp) Highest Testfile-Number: $highestNumber"

Write-Output "$(Get-TimeStamp) Creating test files..."

for($i = $highestNumber + 1; $i -le $fileCount; $i++) {
$iformated = $i.ToString("0000000")
$fileName = "$testDirectory\new_file_$iformated.txt"
if($i % 10000 -eq 0) {
Write-Output "$(Get-TimeStamp) Current Testfile-Number $i"
}
New-Item $testDirectory\new_file_$iformated.txt -type file | Out-Null
}
Write-Output "$(Get-TimeStamp) Done. $fileCount test files."



Gar nicht so einfach ein performantes Skript hinzubekommen. Normalerweise verwendet man in der Powershell häufig Get-ChildItems um Verzeichnisse einzulesen. Bei großen Dateimengen geht dabei der Speicherverbrauch leider durch die Decke (> 3 GB) und das Programm wird sehr langsam. Abhilfe schafft [System.IO.Directory]::EnumerateFiles.

1 Mio Testdateien generieren dauert auf meinem System 20 Minuten.
1 Mio Testdateien verschieben dauert 24 Minuten.

Beide Programme verhalten sich übrigens gutmütig, wenn Du sie abbrichst und noch einmal ausführst (wiedereintrittsfähig).

PHuV
2017-03-06, 00:28:51
Hallo Forum,

ich habe hier aus einer Datenwiedersterstellung einen Ordner mit 2,5 mio Datein. Größe 547GB.
Wie kommt man auf so viele Dateien mit nem halben Tera? :eek:

greg
2017-03-07, 21:08:35
https://blogs.technet.microsoft.com/josebda/2012/11/13/windows-server-2012-file-server-tip-disable-8-3-naming-and-strip-those-short-names-too/

Rooter
2017-03-11, 12:33:20
Wie kommt man auf so viele Dateien mit nem halben Tera? :eek:Wir hatten in der Firma vor Jahren etwas Ähnliches, da hat unserer toller Webshop (gebaut von SQL-Leuten... X-() im Dauerloop Fehlerdateien gedropt. Das sah dann so aus:

http://666kb.com/i/dheldjp2qwgsk2r15.png

MfG
Rooter