부팅 가능한 Linux USB 스틱을 만들 때 동기화가 중요한 이유는 무엇입니까?


15

아치 리눅스 위키에서 : https://wiki.archlinux.org/index.php/USB_flash_installation_media

# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync

[...] 할 일 없습니다 미스 동기는 USB 드라이브를 당겨 전에 완료합니다.

나는 알고 싶다

  • 무엇을합니까?
  • 제외하면 어떤 결과가 있습니까?

노트

dd옵션과 함께 사용되는 명령 status=progress:

tar -xzOf archlinux-2016-09-03-dual.iso | dd of=/dev/disk2 bs=4M status=progress && sync

또는 pv진행에 사용

tar -xzOf archlinux-2016-09-03-dual.iso | pv | dd of=/dev/disk2 bs=4M && sync

답변:


19

이 명령 dd은 장치에 쓸 때 커널 디스크 캐시를 무시하지 않으므로 데이터의 일부가 완료 USB시 아직 스틱에 기록되지 않을 수 있습니다 dd. 이때 USB스틱 을 분리 하면 USB스틱 의 내용 이 일치하지 않습니다. 따라서이 USB스틱으로 시스템을 부팅하지 못할 수도 있습니다.

Sync 캐시에 스틸 데이터를 장치로 플러시합니다.

호출하는 대신 의 변환 옵션을 sync사용할 수 있습니다 fdatasync dd.

fdatasync

완료하기 전에 물리적으로 출력 파일 데이터 쓰기

귀하의 경우 명령은 다음과 같습니다.

tar -xzOf archlinux-2016-09-03-dual.iso | \
dd of=/dev/disk2 bs=4M status=progress conv=fdatasync

conv=fdatasync차종이 dd효과적으로 호출 fdatasync()직전 전송의 끝에서 시스템 호출을 dd종료 (나는 이것을 확인 dd의 소스).

이는 dd명시 적으로 지시하지 않는 한 캐시를 우회하거나 플러시하지 않음을 확인합니다 .


당신의 공헌을 주셔서 감사합니다, 그러나 나는 확실하지이 사항이 올바른지입니다 하지 않습니다이 장치에 기록하는 커널 디스크 캐시 우회 . 커널의 파일 시스템 계층을 통해 파일에 쓸 때 사물이 캐시됩니다. 그러나 장치에 쓰는 것이 걱정됩니다. 가능하면 해당 진술의 출처를 제공해주십시오. 왜냐하면이 질문의 핵심 부분이기 때문입니다. true 인 경우, 장치 간 조작 후에 실행하는 유효한 이유를 제공 합니다. ddsyncdd
Jonathan Komar

예, 캐시됩니다. 캐싱은 커널의 블록 장치 인프라 내에서 발생합니다. 파일 작업 자체는 캐시되지 않습니다. 기본 블록 장치 인터페이스는 캐싱을 수행합니다. 출처 : lxr.free-electrons.com/source/block/blk-flush.c
Serge

@ macmadness86 업데이트 된 답변보기
Serge

7
나는을 사용하는 것을 선호 oflag=sync하므로 progress는 캐시 된 속도가 아닌 실제 전송 속도를 출력합니다 (따라서 1 초 100MB / s 대신 10MB / s 정지하고 10 초간 정지).
Bart Polot

블록 장치에 쓰는 것은 VFS를 우회합니다. 다시 말해, 파일 쓰기는 커널에 의해 캐시 될 수 있지만 일반적으로 장치에 쓰기는 커널에 의해 캐시되지 않습니다 (그렇지 않습니다).
Eric

0

sync (1) 매뉴얼 페이지에서 : "sync-캐시 된 쓰기를 영구 스토리지에 동기화" 기본적으로 sync모든 데이터가 캐시에서 스틱에 기록되도록합니다.


나는 당신의 질문에서 빛이 켜져 있다는 부분을 어디에서 보지 못합니다.
schaiba
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.