리눅스 민트를 데스크톱으로 쓰다보면 한번씩 다들 격는 문제지요. USB에 파일을 카피했는데, 다른 PC에 꼽았더니 복사한 파일이 안보이는 등... 이런것들 때문에 좀 귀찮은 일들이 일어납니다. 분명히 ppt를 만들어서 USB에 넣었는데, 발표때 ppt를 카피하려고 보니까 파일이 없어요. 이게 어떻게 된 일일까요?
그건 바로 리눅스 커널 내부의 캐쉬(cache)들을 메모리에 들고 있기 때문입니다. 이 캐쉬들이 실제로 드라이브에 쓰여지기 전에 USB 펜드라이브(USB 메모리)를 분리하면 USB에 카피했던 파일이 손실되어 버립니다. 물론 이건 USB 펜드라이브 뿐만 아니라 SDD가 아닌 HDD를 사용하고 있는 경우에도 발생할 수 있는 문제지요. 이건 리눅스만의 문제가 아니라 윈도우즈에서도 일어나며 이 현상이 컴퓨터 전원을 강제로 죽여서는 안되는 가장 큰 이유인 것이에요. 그렇다면, 이 캐쉬가 디스크에 실제로 쓰여지는지 확인하는 방법으로 어떤게 있을까요? 아, 물론 드라이브를 마운팅할 때에 sync 옵션을 줘서 즉시 동기화가 이뤄지도록 만드는 방법도 있지만, 이 경우 하드웨어 퍼포먼스 및 수명에 악영향을 주게 됩니다. 특히 반도체 저장장치의 경우에는 sync 옵션을 주는건 쥐약이죠.
1. iostat으로 RW 상태를 관제하는 방법.
iostat 명령은 커널의 IO 상태를 보여주는 명령어입니다. 하지만 한번 실행하면 한번만 뜨지요. 이거를 쉘 스크립트로 "자동 리프리쉬(새로고침)"을 하면 조금 더 편합니다. 저는 이 방법을 다른 방법보다 더 선호하는데, 그 이유는 아래에서 설명드리지요. 자동 리프리슁 하는 방법은 아래와 같습니다.
jaehoon@jaehoon ~ $ while true; do iostat; sleep 1; clear; done
이 명령을 실행하면 현재 IO가 일어나는 중인지, 아닌지를 손쉽게 확인할 수 있습니다. 해당되는 디바이스의 kB_wrtn 값이 변하지 않는 시점까지만 기다리면 되는 문제거든요. 물론, IO 작업이 더이상 이뤄지지 않는다고 해서 막 뽑아도 되는건 아닙니다. 뽑기전에 언마운트(unmount)를 먼저 해줘야겠지요. 지금은 안그렇지만 일부 구버전 커널에서는 언마운트를 하지 않고 그냥 뽑으면 가끔 커널 자체가 죽을 때가 있었어요(PnP 구현이 미흡하던 때에 일부 구형 Gigabyte 2006년형 메인보드에서 발생했었습니다)
2. sync 명령으로 강제로 동기화 시키는 방법.
이 방법은 정말 간단한 방법이긴 한데요, 이 명령을 자주 실행하면 위에서 sync 옵션을 마운팅 할 때 주는 거랑 별반 다름없는 문제가 발생합니다. 퍼포먼스, 수명에 악영향을 주게되어 이게 누적되면 USB 펜드라이브가 플라스틱 막대기가 되거나 읽기 전용으로 굳어버릴 수가 있어요. 이게 제가 iostat으로 RW 상태를 관제하는 방법을 선호하는 이유입니다. 물론, sync 명령으로는 얼마나 IO가 진행되었는지 알 수가 없죠. 다만, 정말 바쁠 때에는 sync 명령을 활용해서 강제로 동기화시켜 주는 것도 나쁘지 않습니다.
jaehoon@jaehoon ~ $ sudo sync
이거 실행해도 아무 메시지가 안떠요. 그냥 동기화가 이루어지게 됩니다. 당연한 사실이지만 sync 명령을 준다고 해서 동기화가 바로 이뤄지는건 아닙니다. 동기화 "우선순위"가 바뀌었을 뿐이지요. 그냥 iostat으로 상태를 관제하는 것이 가장 좋을 겁니다. 거기에 급하다면 sync 명령을 한번 때려주면 되는 것이구요.
3. NEMO 파일 탐색기 자체의 언마운팅 기능을 활용하는 방법.
이 방법이 가장 무식하고 정말 간단한 방법입니다. 파일 탐색기를 보면 좌측 패널에 "장치" 섹션이 있어요, 거기에서 빼려는 드라이브를 선택하시고 우클릭해서 언마운팅(마운트 해제) 버튼을 눌러보는 방법입니다. 이 방법의 경우, 뭔가 동기화될 데이터가 남아있다면 NEMO가 알아서 "이거 지금하면 안된다, 그래서 너가 요청한거 씹을거다"라고 알려줍니다. 될때까지 누르면 됩니다. (.... =ㅅ=.....)
가끔 좌측 패널이 없는 경우도 있는데, 좌측 하단에 폴더 아이콘 있지요? 그거를 눌러주면 패널이 뜹니다. 참고하세요.
뭐, 이렇게 3가지 방법이 있어요. 다른 방법도 많지만 그것들은 복잡합니다. IT 분야에서 거의 모든 범위를 통틀어 통용되는 원칙이 하나 있지요. KISS라고 해서, Keep it simple stupid 원칙입니다. 해석하자면, "가장 간단하고 멍청하게 유지하라" 라는 의미입니다. 필요 이상의 복잡도는 오히려 모든걸 망치는 원인이 되기도 하지요. 아주 간단한 방법이 때로는 정말 위대한 결과를 내기도 하지요. 윈도우즈에서는 동기화 작업을 실시간으로 한다는 소문이.... (그저 루머입니다)
결론은, 기다리세요. 다 될 때까지. 그건 리눅스에서나, 윈도우즈에서나 매한가지로 같습니다. 그저 기다리는 것이 가장 현명한 해결책일 것입니다.
'Anything' 카테고리의 다른 글
커스텀 액션 메뉴 어플릿 - 원클릭 동작 수행! (0) | 2017.07.23 |
---|---|
Hello World 시나몬 데스크릿을 만들어보았다. (0) | 2017.07.23 |
리눅스에 안드로이드 개발 환경 구축하기 (0) | 2017.07.22 |
GTK 3와 Webkit2.0로 리눅스 웹앱 만들기! (0) | 2017.07.22 |
리눅스로 L4 로드벨런서 만들기 (iptables) (1) | 2017.07.21 |