마운트 해제 중에 파일이 블록 장치에 기록되는 상황은 무엇입니까?

마운트 해제 중에 파일이 블록 장치에 기록되는 상황은 무엇입니까?

블록 장치로 감지되는 컴팩트 플래시 카드가 있습니다 /dev/sdb. FAT16 파티션이 있습니다. 이제 FAT16 파일 시스템을 마운트하고 umount파일 시스템과 파일 시스템에 무언가를 쓰면 실제 파일 쓰기는 다음 위치에서 발생합니다 umount.

# mount | grep sdb
/dev/sdb1 on /media type vfat (rw)
# time cp image.bin /media/

real    0m0.179s
user    0m0.000s
sys 0m0.104s
# time umount /media 

real    0m18.185s
user    0m0.004s
sys 0m0.032s
# 

USB 플래시 드라이브에서도 비슷한 동작을 본 적이 있습니다. 파일이 파일 시스템에 즉시 기록되는지 아니면 파일 시스템 분리 중에 기록되는지는 어떻게 결정합니까?

답변1

파일 동기화가 켜져 있거나 파일 시스템이 동기화 옵션으로 마운트되면 쓰기가 즉시 완료됩니다.

이는 일반적으로 전체 시스템 성능에 좋지 않으므로 쓰기 호출이 반환될 때 중요한 데이터를 저장 장치에 커밋해야 하는 경우에만 이 작업을 수행하십시오. 파일 복사는 중요한 것으로 간주되지 않으므로 커널 버퍼는 내부적으로 쓰고 데이터를 주기적으로 미디어에 플러시합니다.

sync다음 명령을 사용하여 운영 체제에 이러한 모든 캐시를 플러시하도록 요청할 수 있습니다

답변2

커널은 메모리에 데이터를 캐시합니다.읽다데이터가 중요합니다(누군가가 이를 기다리고 있음).글쓰기천천히 수행할 수 있습니다(아무도 서두르지 않으며 데이터를 재사용/재수정할 수 있음). 장치는 동시에 읽거나 쓸 수 있으므로 가능한 한 오랫동안 쓰기를 연기하는 것이 좋습니다. 따라서 데이터는 탈출구가 없는 경우에만(공간이 필요한 경우) 커널에 의해 "자발적으로" 기록됩니다.지금). 파일을 동기식으로 열고(변경 사항이 발생하는 즉시 쓰기) fsync(2)파일을 호출하여 데이터를 강제로 출력함으로써 커널이 강제로 작동하도록 할 수 있습니다. 장치를 마운트 해제할 때 해당 장치에 대해 캐시된 모든 데이터는 분명히 미리 기록되어야 합니다.

위의 내용은 기계가 언제든지 충돌하여 기록되지 않은 많은 데이터를 남길 수 있으므로 소름이 끼칠 것입니다. 그래서 sync(1)커널이 캐시된 모든 파일 데이터를 쓰도록 하는 프로그램이 있습니다. 위에서 언급한 대로 데이터 손실을 방지하기 위해 일반적으로 주기적으로(보통 5초마다) 실행되도록 설정됩니다. 배포판의 설정 또는 조정 방법을 정확히 확인하려면 배포판 설명서를 확인해야 합니다.

관련 정보