split
파일을 전체적으로 동일한 저장 공간을 사용하는 청크로 분할합니다(사용된 디스크 공간의 두 배).
ln
파일을 복사하지 않고도 다른(대상) 파일에 대한 기호 링크(symlink)를 생성할 수 있으므로 대상 파일 공간을 두 배로 소비하지 않습니다.
저장 공간이 부족하기 때문에 대용량 파일의 특정 오프셋을 가리키는 참조/기호 방식(즉, 가상 파일 분할)으로 파일을 분할하는 것이 가능합니까?
예를 들어, 2MB 파일이 있는 경우 이를 2개의 부분으로 분할합니다. 여기서 각 부분은 1MB의 더 큰 파일을 참조합니다(심볼릭 링크 작동과 동일). 각 부분은 다음을 수행합니다.
- 다른 조각과 겹치지 않습니다(조각은 대용량 파일의 동일한 데이터를 참조하지 않음).
- 참조하는 대용량 파일의 일부와 동일한 스토리지 크기를 사용하지 않습니다.
piece_1.file -> 2mb.file 1st MB
piece_2.file -> 2mb.file 2nd MB
그리고 각 블록의 저장 크기는 1MB보다 훨씬 작습니다.
답변1
저장 공간이 부족하기 때문에 대용량 파일의 특정 오프셋을 가리키는 참조/기호 방식(즉, 가상 파일 분할)으로 파일을 분할하는 것이 가능합니까?
직접적으로는 아닙니다. POSIX 사고에서는 파일이 그런 식으로 작동하지 않습니다. 이는 보다 독립적이고 원자적인 데이터 단위입니다.
두 가지 옵션:
루프백 장치
이것은달리다즉, 온디스크 솔루션은 아니지만 수동 설정이 필요합니다. 이게 장점이 될 수도 있고 단점이 될 수도 있어요!
freedesktop 시스템 메시지 버스와 호환되는 세션 관리자를 사용하는 경우(예: 그래픽으로 시스템에 로그인하고 gnome, xfce4, kde...를 실행하는 경우) 루프백 장치를 쉽게 설정할 수 있습니다.
blksize=$((2**20))
udisksctl loop-setup -s $blksize -f /your/large/file
udisksctl loop-setup -s $blksize -o $blksize -f /your/large/file
- 첫 번째 명령은 다음을 제공합니다.
/dev/loop
답변2
Linux에서는 장치를 사용하여 이러한 작업을 수행할 수 있습니다 loop
.
예를 들어:
losetup --find --show --sizelimit=2M file
losetup --find --show --offset=2M --sizelimit=2M file
losetup --find --show --offset=4M --sizelimit=2M file
3개의 2MiB 청크를 참조하는 3개의 루프 장치에 대한 경로를 출력합니다 file
.
답변3
내가 당신을 올바르게 이해한다면 이것은 당신의 문제에 매우 가깝습니다. 아니요?
supu@devuan ~/TEST ❖ cat bigfile.txt 8:01
DIES IST VIEL TEXT
DIES IST VIEL TEXT
supu@devuan ~/TEST ❖ split -n2 bigfile.txt
supu@devuan ~/TEST ❖ ls -l 8:00
insgesamt 12.288
-rw-r--r-- 1 supu supu 38 2023-03-14 07:59 bigfile.txt
lrwxrwxrwx 1 supu supu 3 2023-03-14 08:00 piece1 -> xaa
lrwxrwxrwx 1 supu supu 3 2023-03-14 08:00 piece2 -> xab
-rw-r--r-- 1 supu supu 19 2023-03-14 08:00 xaa
-rw-r--r-- 1 supu supu 19 2023-03-14 08:00 xab
supu@devuan ~/TEST ❖ cat piece? 8:00
DIES IST VIEL TEXT
DIES IST VIEL TEXT
supu@devuan ~/TEST ❖ cat xa? 8:01
DIES IST VIEL TEXT
DIES IST VIEL TEXT
supu@devuan ~/TEST ❖