USB를 꽂고 파일을 수정했다가 뽑아도 데이터가 손실되지 않습니다. 하지만 mount
USB에 있는 파일을 사용하면 데이터가 손실됩니다. 어떻게 되어가나요? 데이터 손실을 방지하려면 어떤 조치를 취해야 합니까? 이상한 점은 데이터 손실 없이 파일을 작성하고 USB를 분리할 수 있지만 마운트를 사용하면 데이터가 손실된다는 것입니다. 이것은 예이다
echo "Data Data Data" > /media/your-usb/data
#unplug your usb. plug into another computer
#you'll see you didn't lose any data
#Create a file, put ext4 filesystem on it
dd if=/dev/zero of='/media/your-usb/test.bin' count=100000;
losetup /dev/loop0 /media/your-usb/test.bin
mkfs.ext4 /dev/loop0
losetup -d /dev/loop0
#Mount FS
mkdir m
mount -o loop /media/your-usb/test.bin m
echo Test > m/test
umount m
#No loss of data
mount -o loop ./test.bin m
echo Test2 > m/test2
#wait a moment. You'd think the data will flush
#unplug your USB
umount m
#plug your USB
mount -o loop ./test.bin m
cat m/test2 #error test2 is not a file
답변1
Linux는 이동식 드라이브를 감지하면 데이터를 자주 새로 고쳐야 한다는 것을 알 만큼 똑똑합니다. 루프백을 설치하면 지원되는 장치가 언제든지 삭제할 수 있는 파일인지 알 수 없습니다.
다음 명령을 사용하면 시스템이 쓰기를 캐시하지 않도록 강제할 수 있습니다.
mount -o loop,sync /media/your-usb/test.bin m
이로 인해 성능이 저하되며 페이지 마모에 대한 경고도 알고 있어야 합니다 man mount
.
sync All I/O to the filesystem should be done synchronously. In case
of media with limited number of write cycles (e.g. some flash
drives) "sync" may cause life-cycle shortening.
sync
어떤 이유로 이 작업을 수행하고 싶지 않은 경우 다른 방법은 최소한 장치를 제거하기 전에 실행하는 것입니다 umount
.
답변2
USB를 꽂고 파일을 수정했다가 뽑아도 데이터가 손실되지 않습니다.
정정: 데이터가 손실되지 않았습니다.하지만. 당신은 알아차렸습니다.
아마도 귀하, 귀하의 배포판 또는 귀하가 사용하는 자동 마운트 프로그램의 관리자가 이동식 USB 저장 장치를 이 옵션으로 마운트하도록 구성했을 것입니다. sync
이로 인해 데이터가 즉시 기록됩니다. 이 sync
옵션은 저장 매체가 갑자기 빠지거나 시스템이 충돌하더라도 데이터가 손실되지 않도록 모든 데이터를 쓸 수 있다는 장점이 있지만 다음과 같은 여러 가지 단점이 있습니다.
- 플래시형 스토리지는 한 번에 몇 바이트씩 데이터를 쓰기 때문에 더 빨리 마모되지만, 한 번에 상당히 큰 블록을 써야만 스토리지를 업데이트할 수 있으므로 각 블록은 여러 번 다시 쓰여지게 됩니다. 이렇게 하면 기본 USB 드라이브가 매우 빠르게 종료됩니다.
- 제대로 마운트 해제되지 않은 파일 시스템은 더티(dirty)로 표시됩니다. 더티로 표시되었지만 일관된 데이터가 포함된 파일 시스템과 쓰기 중에 가져온 파일 시스템과 일치하지 않는 데이터가 포함된 파일 시스템을 구분할 수 없습니다. 이는 "더티" 표시가 없는 FAT와 같은 파일 시스템에는 적용되지 않습니다.
- 더 느립니다. 아마도 훨씬 더 느릴 것입니다.
장치를 분리하기 전에 제거 하지 마십시오 sync
.