열거하지 않고 크기가 대략 100kb-500kb 인 잠재적으로 10,000 개 이상의 파일을 포함하는 여러 하위 디렉토리가있는 디렉토리를 백업하려면 .NET에 방법이 있습니까? 여기서 사용 사례는 파일을 USB 저장소 및 NAS로 점진적으로 백업하는 것이지만 파일 수로 인해 실제로는 오랜 시간이 걸릴 수 있습니다. 나는 VSS에 익숙하고 그것을 활용하는 사용자 지정 백업 응용 프로그램을 만들었지 만 스냅 샷을 마운트 된 이미지로 노출하지 않고도 이러한 파일이 포함 된 볼륨을 스냅 샷으로 저장하고 스냅 샷을 저장하는 방법이 있는지 궁금합니다. 각 파일. 마지막 경기는 복사 작업에 소요되는 시간을 줄이는 것입니다.많은 수의 파일을 열거하지 않고 백업
답변
Windows Server Backup Feature 좋은 대안이 될 수 있습니다 사용자 정의 내장 된 솔루션을 검사합니다. Windows Server 2016을 실행하는 경우이 새로운 기능을 흥미롭게 설명하는 article을 찾을 수 있습니다.
나는 이것을 심각하게 보게 될 것입니다. 분명히 블록 수준이므로 개별 파일 수준 작업보다 낫습니다. – Smitty
나는이 길로 갈 것 같습니다. 실제로 Windows Server Backup PowerShell (https://msdn.microsoft.com/en-us/library/gg241214(v=vs.85))을 호출하기 위해 .NET 응용 프로그램을 약간 작성할 수있는 곳을 찾았습니다. .aspx) 명령은 예약 된 '일회성'백업을 실행할 수 있습니다. 이것이 매력적인 솔루션 인 이유는 Windows Server 백업은 볼륨 섀도 복사본을 사용하기 때문에 좋은 파일이므로 일부 파일은 확실히 잠겨 있습니다. 또한 노출 된 스냅 샷에서 복사되는 개별 파일이 아닌 VHD 이미지 만 처리해야합니다. – Smitty
MFT (마스터 파일 테이블) 레코드는 1K or 1,024 bytes in size이므로 이름, 특성 등을 검색하는 데는 파일 데이터 자체를 이동하는 데 필요한 읽기와 비교할 때 약간의 I/O가 필요합니다. 따라서 파일 디렉터리 레코드를 열거하는 것은 문제가되지 않으며 처리의 일부를 제거해도 스피드 미터에 작은 깜박임 이상이 발생하지는 않습니다.
cloning software을 사용하여 디스크 데이터 자체의 저수준 BIOS "복제본"(복사본이 아님)을 시도해 볼 수 있다고 가정합니다. 디스크 헤드가 지그재그 할 필요가 없으므로 조금 더 빨라질 수 있습니다. 반면, 하드 디스크가 솔리드 상태 인 경우이 옵션은 거의 영향을 미치지 않습니다. 랜덤 액세스는 순차 액세스만큼 빠르기 때문입니다.
또 다른 옵션은 각 파일의 최종 수정 날짜 시간 소인을 검사하여 변경된 파일 만 백업하는 것입니다. 이를 수행하는 쉬운 방법은 /D
스위치 (인수 없음)와 함께 XCOPY 명령을 사용하여 마지막 백업의 날짜/시간을 현재 파일과 비교하고 하드 디스크의 파일이 더 새로운 경우에만 복사를 수행하는 것입니다 외장 드라이브의 파일보다
정말 열거 형이 아니라 시간이 걸리는 복사 작업입니다. xcopy와 robocopy에 대해 들어 봤지만 FileSystemWatcher를 사용하여 디렉토리와 하위 디렉토리의 변경 이벤트를 잡아낼 수있는 무언가를 개발했습니다. 내가 바퀴를 다시 만들 수 없다면 나는 알 것이다. – Smitty
.Net과 다른 프로세스를 호출하고 RoboCopy를 사용하여 파일을 이동할 수 있습니다. 그것은 스레드의 수를 지정하는 등의 매개 변수를 많이 사용하는, 또는 타임 스탬프 등
public static void Main()
{
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = "C:\\Windows\\System32\\robocopy.exe Source Destination";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
'ZipFile.CreateFromDirectory'의 성능이 받아 들여 지는지 확인 했습니까? –
@EugeneKomisarenko - 나는 그것에 대해 실제로 생각해 왔으며 여전히 그것을 궁리하고 있습니다. 나는 모든 것을 zip에 보관할 수 있으며 심지어 내가 이해하는 것으로부터 추가 할 수 있습니다. 내가 변경된 파일의 최신 버전을 가지고 있는지 확인하기 위해 일부 빈도로 보관 파일을 다시 만들어야 할 것입니다. 나는 이것이 증분 백업의 형태를 취할 것이라는 점을 제 질문에서 제외했습니다. – Smitty