부팅 가능한 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.