파일 시스템의 공간을 사용하지 않고 Linux에서 두 파일을 결합(연결)하고 싶습니다. 내가 할 수 있을까?
A + B = AB
파일은 파일 시스템의 AB
섹터 또는 세그먼트를 사용합니다 A
. B
이것이 가능합니까?
두 파일을 모두 복사하지 않고도 (느린 프로세스임) gparted
새 파일로 인식할 수 있나요 ?AB
답변1
나는 당신이 큰 파일로 나누어진 매우 큰 디스크 이미지를 가지고 있고 그 f1
디스크 이미지의 파티션을 수정하고 싶다고 가정합니다. 그런 다음 모든 파일의 크기가 512의 배수라고 가정하면 루트로 이 작업을 수행할 수 있습니다.f2
f3
offset=0
for f in f1 f2 f3; do
loop=$(losetup -f --show -- "$f")
size=$(blockdev --getsz "$loop")
printf '%s\n' "$offset $size linear $loop 0"
offset=$(( offset + size ))
done | dmsetup create myimg
그런 다음 이후에 생성된 파티션을 수행 gparted /dev/mapper/myimg
하고 포맷하고 마운트할 수도 있습니다.
장치를 제거하려면:
- 모든 파일 시스템과 기타 리소스가 마운트 해제/해제되었는지 확인하세요.
dmsetup remove myimg
losetup -d
모든 루프 장치에서 실행됩니다.
답변2
프로세스 대체두 개 이상의 파일을 연결하여 하나의 프로세스의 하나의 파일처럼 보이도록 할 수 있습니다 some_program <(cat A B)
.
gparted
그러나 입력 파일을 수정하도록 설계된 다른 프로그램과 함께 사용하는 것은 의미가 없습니다. 이는 실제 파일이 아니며 FIFO, 익명 파이프 및 임시 파일입니다. 생성된 "파일"은 <()
읽기 전용이며 검색할 수 없습니다(즉, 순차적으로만 읽을 수 있음).
프로세스 교체에는 stdout을 프로세스로 리디렉션하는 것도 포함되지만 실제 블록 장치나 디스크 이미지 파일을 기대하는 >()
이 방법은 여전히 아무 소용이 없습니다 .gparted