Linux를 종료하기 전에 sync (8)의 실행이 여전히 필요합니까?


19

나는 아직도 사람들이 sync; sync; sync; sleep 30; halt리눅스를 셧다운하거나 재부팅하는 것에 대해 이야기 할 때 주문을 사용하는 것이 좋습니다 .

필자는 리눅스를 처음 시작한 이후로 운영해 왔으며 이것이 BSD 4.2 / 4.3 및 SunOS 4 일에서 권장되는 절차 였지만 적어도 지난 10 년 동안 그렇게해야한다는 것을 기억할 수 없습니다. 아마 리눅스의 셧다운 / 재부팅을 통해 수천 번을 겪었습니다.

커널이 단일 사용자 모드 (예 : / tmp)에서도 필요한 루트 파일 시스템 및 기타 중요한 파일 시스템을 마운트 해제하고 동기화 할 수 없었기 때문에 이것이 비동기 일로 의심되므로 플러시하도록 명시 적으로 지시해야했습니다 디스크에 가능한 한 많은 데이터.

요즘 커널 소스에서 관련 코드를 찾지 않고 ( http://lxr.linux.no 및 google을 통해 파고 들어 ) 커널이 루트 파일 시스템조차 깨끗하게 마운트 해제 할 수있을만큼 똑똑하고 파일 시스템이 충분히 똑똑하다고 생각합니다 정상 shutdown/ reboot/ 동안 자체 마운트를 해제하기 전에 sync (2)를 효과적으로 수행합니다 poweorff.

"sync; sync; sync"파일 시스템 (예 : 부하가 너무없는 마운트 해제 깨끗하게 (예 : 물리 디스크 오류) 또는 시스템 만 직접 재부팅 (8)을 강제하는 것은 그 동결의 그것을 밖으로 얻을 것이다 상태입니다 곳 극단적 인 경우에만 필요 종료 명령을 예약하도록하려면 high).

또한 sync이동식 장치를 마운트 해제하기 전에 절차를 수행하지 않으며 문제가 발생하지 않습니다.

또 다른 예-Xen은 DomU가 shutdownDom0에서 명령을 전송하도록 허용합니다. 이는 누군가가 sync; sync; sync먼저 마법을 입력하고 입력하지 않아도 "완전 종료"로 간주됩니다 .

수천 건의 시스템 종료로 인해 맞습니까?


읽기 전용 파일 시스템을 읽기 / 쓰기로 다시 마운트하는 것은 어떻습니까? rootfs를 읽기 전용으로 마운트하고 다음 명령을 사용하여 읽기 / 쓰기로 다시 마운트합니다. mount -o remount, rw / 그런 다음 rootfs를 변경하면 mount -o remount, ro /를 실행하지만 fs를 확인할 때 몇 가지 문제가 나타납니다 fsck와 함께. 읽기 전용으로 마운트하기 전에 두 번째 명령이 SYNC를 호출합니까?

답변:


18

사람들이 sync; sync이전에 실행 하는 halt이유는 halt명령이 이전 Linux에서 시스템을 완전히 종료하지 않기 때문 입니다. SYSVr4 시스템에서이를 수행하는 올바른 방법은 항상 다른 실행 레벨로 이동하도록 초기화하는 것입니다.

BSD와 SunOS 4는 SYSVr4 운영 체제가 아니기 때문에 서로 다릅니다. Solaris (SunOS 5)는 SYSVr4이며 Linux는 사용하려는 SYSVr4 표준의 비트를 선택합니다.

중단을 사용하는 것은 실제로 프로세스 중지 및 디스크 마운트 해제와 같은 작업을 수행하기 위해 init 스크립트를 실행하지 않기 때문에 대부분의 UNIX (Linux는 예외 중 하나임)에서 수행하는 매우 나쁜 방법입니다.

절대로 리눅스가 아닌 다른 종류의 UNIX 시스템을 사용 하지 않을 것이라고 확신 할 수 있다면 계속 사용할 수 halt있습니다. 다른 UNIX를 사용할 가능성이 있다면 init _runlevel_or 를 사용하는 습관을들이는 것이 좋습니다. shutdown.

shutdown명령은 실제로 init프로세스에 실행 레벨 실행 레벨 을 변경하도록 지시합니다 . 그렇게하면 init는 각 K * init 스크립트 및 해당 실행 레벨과 연관된 S * init 스크립트를 실행합니다. 실행 레벨 0의 스크립트 중 하나가 파일 시스템 마운트 해제를 수행합니다.

Linux에서 실행 레벨이 이미 0 (종료) 또는 6 (재부팅)이 아니면 halt명령 은 명령을 호출 합니다 . 손실이 없습니다.shutdown

파일 시스템을 사용하여 마운트를 해제 umount하면 데이터가 마운트 해제되기 전에 디스크에 동기화됩니다.

sync; sync; haltLinux 에서 실행 하고 있다면 개발자가 올바른 작업 을 halt수행 했으므로 파일 시스템 상태에 문제가 없을 것입니다. 그러나 사용하는 것이 더 정확합니다.shutdown now


설명 주셔서 감사합니다. 당신이 말하는 것을 명확히하기 위해서 – "개발자들이 옳은 일을 멈추게했다"는 것은 "정지"가 "sync"를 호출하거나 결국 "sync"를 호출하는 적절한 초기화 스크립트를 실행한다는 것을 의미합니까? 이미 단일 사용자 모드에 있고 "halt"를 호출하는 것은 어떻습니까? Linux 커널 이 실제로 갑자기 종료되지 않을 정도로 똑똑하지만 종료하기 전에 모든 파일 시스템을 마운트 해제 한다고 가정 합니까?
아모스 샤피 라

1
halt전화 shutdown호출 umount동기화를 수행한다.
DaveG

감사합니다 DaveG. 그래서 당신이 말하는 것은 모든 것이 사용자 수준에서 일어나고 커널은 자체적으로 파일 시스템을 마운트 해제하고 동기화하지 않습니까? 어쨌든 그것은 오늘날 "동기화; 셧다운"의식이 중복되는 것처럼 들린다.
Amos Shapira

7

여러 sync호출을 사용하면 OS 및 디스크가 쓰기 큐를 플러시 할 수 있습니다. "sync; sync; sync"그 유용한 것으로 간주되지 않았다; "sync<cr> sync<cr> sync<cr"ASR-33에서 캐리지 리턴 / 라인이 충분한 지연을 제공하는 동안 한 가지 지연과 지연. 정지는 항상 통화 동기화를 수행했습니다. 문제는 전원을 제거하기 전에 대기열을 비울 수있는 시간이 충분한 지 여부였습니다.

원래 포스터 sync; sleep 30는 의도 한 것과 더 잘 어울립니다.


7

왜 여러 번 발행해야하는지에 대해서만 말할 수 있습니다 sync. 이 명령은 디스크에 플러시를 예약하지만 실제 플러시가 완료되기 전에 반환됩니다. 후속 sync명령은 다른 플러시를 예약하고 종료하기 전에 미해결 플러시가 진행될 때까지 차단됩니다. 따라서 sync; sync동기 플러시를 보장합니다. 두 번 이상 할 필요가 없으며 sleep믹스를 가져올 필요가 없습니다 .


5

"sync; sync; sync"는 당신의 나이를 밝힐 목적이 없다고 우리 모두에게 말합니다.

좋은 시절로 돌아가서 유닉스가 십대들을위한 것이되기 전에는 스트리밍 / 백업 요구에 TAPE를 사용해야했습니다. 종종 테이프 기반 파일 시스템을 마운트하여 백업 등을 스트리밍하는 경우도있었습니다. 이 길고 얇은 마그네틱 플라스틱 테이프는 파일을 저장하기 위해 우리 모두가 가지고 있던 ..

'sync; sync; sync'명령은이 오래된 테이프 시스템이 종료 전까지 끝까지 되감도록 지시 할 수있는 방법이었습니다. 모든 파일 시스템과 마찬가지로 sync cmd를 수신하는 펌웨어가 내장되어 있습니다. 동기화 버퍼 명령이 거의 즉시 뒤 따르면 테이프 드라이브 자체가 "테이프 되감기 및 마운트 해제"를 의미하는 것으로 해석합니다. 이 방법을 넘어서 테이프 드라이브를 되 감으라고 할 수있는 방법이 없었습니다. ) 우리의 근육 기억. 테이프가 덜 보편적이고 하드 드라이브가 더 많이 사용 가능 해지 자마자 민속적인 지위를 얻었지만 테이프 드라이브를 사용하는 사람들에게는 여전히 유용합니다.


3
테이프는 문자 장치입니다. "마운트"는 블록 장치에서 작동합니다. 나는 거기에 있었고 (80 년대 중반에 BSD 4.2로 Vax 11/750에서 "덤프"를 실행하고) 테이프 장치에서 "동기화"를 실행하지 않았습니다. 테이프를 하나의 장치 이름으로 열고 다른 장치와 함께 열었을 때의 위치를 ​​유지하면 테이프가 자동 되감기되며, 필요한 경우 "mt"를 사용하여 명시적인 명령을 보낼 수 있습니다.
Amos Shapira
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.