연속 복사 – 파일을 연속적으로 복사하는 방법은 무엇입니까?

연속 복사 – 파일을 연속적으로 복사하는 방법은 무엇입니까?

각 개별 파일이 연속되도록 여러 파일을 플래시 드라이브에 복사하고 싶습니다. 서로 연속적일 필요는 없으며 어떤 순서로든 가능합니다. 이러한 파일은 수백 메가바이트에서 기가바이트에 이르기까지 매우 큽니다. 드라이브에 있는 다른 파일의 조각 모음을 수행하면 시간이 낭비되고 플래시 미디어가 불필요하게 마모됩니다.

최소한 FAT32에 대해 이 작업을 수행할 수 있기를 원하지만 *nix파일 시스템 접근 방식도 높이 평가됩니다.

기본적으로 두 가지 접근 방식이 있습니다.

  • 파일을 복사하고 조각 모음을 해보세요.
  • 각 파일에 대해 충분한 연속 여유 공간을 확보한 다음 각 파일을 해당 위치에 복사합니다.

두 번째 옵션은 일반적으로 첫 번째 옵션보다 훨씬 빠르며 플래시 미디어의 불필요한 마모를 방지하므로 두 번째 옵션이 매우 선호됩니다.

오프라인에서 작동하는 솔루션은 마음에 들지 않지만 분명히 온라인이 더 좋습니다.

답변1

나는 당신이 무엇을 하고 싶은지 잘 이해하지 못한다는 것을 인정해야 하지만, 그것이 중요하다고 생각하지 않습니다. 귀하가 요청한 작업을 수행하도록 설계된 이 도구를 찾았습니다 defragfs(귀하가 하려는 작업을 제가 이해한 경우).

http://defragfs.sourceforge.net/index.html

제 생각에는 이 도구의 특징은 조각 모음이 가능하다는 것입니다.뒤쪽에, 내 생각에는 기본적으로 디스크에 파일을 쓸 때 순서대로 완료된다는 것을 보장하고 싶은 것 같습니다. StackOverflow Q&A에 따르면 다음과 같습니다.Linux에서 인접한 디스크 블록에 파일을 저장하는 방법, 쓰기 완료 아키텍처를 고려하면 불가능해 보입니다.

이 Q&A를 마무리하기 위해 유용할 것 같은 다음 리소스를 찾았습니다.

답변2

Linux에서 이 작업을 수행해야 하는 경우:

rsync --preallocate /path/to/source/file /path/to/destination/

rysnc는 인접한 저장소 블록을 미리 할당하고 파일을 여기에 복사합니다. FAT 및 NTFS에서도 작동합니다.

파일이 대상에 이미 존재하지 않는지 확인하세요. 그렇지 않으면 rsync가 해당 파일을 재할당하고 다시 복사하지 않습니다. 그렇다면 삭제하고 휴지통을 비워서 정말로 없어졌는지 확인한 후 이 명령을 실행하세요.

연속 복제 확인:

filefrag /path/to/destination/file

"1개 범위를 찾았습니다"는 파일이 연속되어 있음을 의미합니다. 둘 이상이면 조각화되어 있음을 의미합니다.

조각화가 지속되면 filefrag소스 파일 조각화 확인을 사용하십시오. 그렇다면 rsync --preallocate소스 파일을 새 이름으로 복사하고 소스 파일 조각 모음을 수행하십시오. 그런 다음 원하는 대상으로 다시 rsync하십시오. 때로는 이를 여러 번 수행하면 소스 및 대상 파일이 1 범위로 줄어들 수 있습니다.

이후에도 조각난 상태로 남아 있으면 대상 드라이브에 전체 파일을 저장할 연속 공간이 충분하지 않을 수 있습니다. 전체 대상 드라이브의 조각 모음을 수행하거나 filefrag해당 드라이브의 대용량 파일 조각화 확인을 사용하고 를 사용하여 조각 모음을 수행 rsync --preallocate한 후 다시 시도하십시오.

마지막으로, NTFS 드라이브에 동기화하는 경우 NTFS는 3GB 지점에 카탈로그 파일의 작은 부분을 예약하므로 파일이 해당 3GB 지점과 겹치면 연속되지 않을 수 있습니다. 여기에서 Easy2Boot 토론을 참조하세요.

https://easy2boot.xyz/create-your-website-with-blocks/make-using-linux/#Making_files_contigulous

(Easy2Boot에는 Linux에서 FAT 및 NTFS 드라이브 조각 모음을 위한 defragfs유틸리티 도 포함되어 udefrag있어 전체 드라이브 조각 모음이 필요한 경우 유용할 수 있습니다.)

답변3

적어도 FAT32에서는 가능하지만 도구 이름이 기억나지 않습니다.

내 기억이 정확하다면 먼저 전체 길이 홀을 호출하고 이를 새 스트림에 할당한 다음 해당 스트림에서 파일을 읽고 쓰는 것을 기반으로 합니다.

기억이 정확하다면 사전 할당된 복사본을 통해서도 NTFS를 사용할 수 있습니다.

그러나 NTFS 압축 파일의 경우 방법이 없습니다... Windows는 파일을 먼저(비압축) 쓴 다음 파일을 블록 단위로 압축하기 때문에... 솔직히 말하면 파이프에서 수행합니다... 그리고 그것이 파일이 그렇게 조각화되는 이유입니다(10GiB 파일은 수십만 개가 넘는 조각을 생성할 수 있습니다).

NTFS 압축이 활성화된 경우 이를 방지하는 도구/명령이 있는지 모르겠습니다. 오래 전에 Windows에서 조각화 없이 복사할 수 있는 멋진 GUI가 있는 도구를 사용했지만 이름이 기억나지 않는 것 같습니다.

따라서 제가 말씀드릴 수 있는 최선의 방법은 Windows에서 XCOPY해당 플래그와 함께 /J명령줄 유틸리티를 사용하라는 것입니다.

조각화되지 않도록 시도하며 NTFS 압축이 비활성화되어 있거나 FAT32를 사용하는 경우 대용량 파일에 적합합니다.

NTFS 압축 파이프 조각화 설명:

  1. 블록 N은 클러스터 N에 기록됩니다.
  2. N+# 주변의 클러스터는 압축되어 다른 곳에 저장되므로 N과 N+# 사이의 클러스터는 무료가 됩니다. 즉, 파일이 매우 조각화됩니다. 10GiB = 100,000개의 조각(50% 압축 가정). 이것이 NTFS 압축이 그토록 나쁜 이유입니다. 파일이 먼저 RAM에 압축된 다음 디스크로 전송되면 조각화가 발생하지 않거나 최소한 방지할 수 있습니다.

이것의 또 다른 부작용은 5GiB의 여유 공간이 있고 6GiB 파일을 작성하려고 한다고 가정하면 압축 후 3GiB만 필요하다는 것입니다. 이건 불가능한데 먼저 2GiB(비압축)을 다른 곳으로 옮기면 여유공간이 7GiB가 되고, 6GiB를 쓰고, 3GiB만 되도록 압축하면 여유공간은 4GiB가 되고, 나중에 넣으면 우리가 이동하는 데이터 중 2GiB는 모두 있고 2GiB는 무료입니다. 요점은 압축을 풀 공간이 충분하지 않으면 NTFS에 파일을 복사할 수 없다는 것이며, NTFS 압축 후에 공간이 충분한지는 중요하지 않습니다. 먼저 압축 없이 쓴 다음 압축을 적용하기 때문에 이 모든 것이 필요합니다. 마지막으로 NTFS 드라이버는 파이프에서 이 작업을 수행하므로 이론적으로는 여전히 가능하지만 여유 크기 부분에 대한 확인은 변경되지 않았습니다.

Windows는 압축된 파일 "뒤"에 파일을 쓰지 않지만 압축되지 않은 상태로 저장한 후 파일을 "압축"합니다. 따라서 각 클러스터에 대해 하드 드라이브에는 두 번의 쓰기 시도가 표시됩니다. 첫 번째는 압축되지 않은 데이터를 사용하고 두 번째는 압축된 데이터를 사용합니다. 최신 파이프형 NTFS 컨트롤러는 HDD가 두 쓰기를 모두 볼 수 없도록 방지하지만 첫 번째 NTFS 버전에서는 HDD가 압축되지 않은 전체 파일을 쓴 다음 파일을 압축합니다. 이는 매우 크고 압축 가능한 파일의 경우 매우 두드러집니다. NTFS로 몇 MiB로 압축된 10GiB 파일(0으로 채워진 파일)을 작성하는 것은 압축되지 않은 파일 버전을 작성하는 것보다 시간이 더 오래 걸립니다. 요즘에는 파이프라인이 이를 깨뜨려 시간이 거의 걸리지 않지만 이전에 사용 가능한 크기는 여전히 충분합니다.

언젠가 NTFS 압축 방법이 한 줄을 압축하여 쓰기 후에 조각 모음을 하지 않고도 조각 없는 NTFS 압축 파일을 얻을 수 있기를 바랍니다. 그때까지 가장 좋은 방법은 플래그 및 /또는 이름이 기억나지 않는 GUI 도구를 XCOPY사용하는 것 입니다. Windows는 당시 XP만 지원했으며 일시 중단, HDD1에서 HDD2로, HDD3에서 HDD4로 병렬 복사 및 사전 할당 옵션이 있었습니다. 도움이 되었기를 바랍니다!/JCONTIG

답변4

방금 이것이 FAT32에서만 작동한다는 것을 발견했습니다.

관련 정보