![QEMU 이미지를 생성할 때 쓰기 중 복사를 비활성화해야 하는 이유는 무엇입니까?](https://linux55.com/image/118684/QEMU%20%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%A0%20%EB%95%8C%20%EC%93%B0%EA%B8%B0%20%EC%A4%91%20%EB%B3%B5%EC%82%AC%EB%A5%BC%20%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94%ED%95%B4%EC%95%BC%20%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
이것아치스 위키btfs를 사용할 때는 디렉토리에 있는 이미지의 쓰기 중 복사를 비활성화하는 것이 좋습니다. 읽고 쓸 파일이 많은 경우 이것이 좋은 생각이라고 생각합니다. 이것질문은 이 아이디어를 탐구합니다. VMWare는 다른 파일을 생성하고 스냅샷에 기록하는데, 이는 기록 중 복사를 사용할 때 문제가 될 수 있다는 것을 알고 있습니다.
QEMU를 사용하면 VM이 있기 때문에 파일이 계속 열려 있기 때문에 VM 종료 후 쓰기에 문제가 있을 수 있지만 VM 종료 후 느린 I/O는 문제가 되지 않는다고 생각합니다. QEMU에 대해 이 단계를 수행하면 어떤 함정을 피할 수 있나요?
또한: 이 질문에 대한 이미지가 원본이라고 가정합니다. qcow2에는 이미 복사-쓰기 기능이 있으므로 안정성 문제가 발생할 수 있습니까?
답변1
BTRFS에서 가상 머신 이미지의 성능 저하는 BTRFS의 경우 대용량 파일 쓰기로 인해 발생하는 것이 아니라 동일한 파일에 대한 쓰기입니다. 이 문제는 많은 것에서 비롯됩니다.무작위의같은 파일에 씁니다. 이는 파일 전체에서 발생하는 쓰기입니다.
즉, 무작위 쓰기는 BTRFS의 COW를 방해하여 파일 조각화를 유발하고 결과적으로 읽기 성능이 저하될 수 있습니다. 이미지 파일이 있으면 사용할 수 있습니다 filefrag
.
이는 단순한 VM 이미지 문제가 아닙니다. 이는 Firefox에서 사용하는 SQLite 데이터베이스와 같이 임의의 파일 오프셋으로 작성된 모든 파일에 영향을 미칩니다.
솔루션/해결 방법
BTRFS의 파일 조각화에 대해 수행할 수 있는 몇 가지 작업이 있습니다. 다음 옵션 중 하나를 선택하십시오.
nodatacow
전체 파일 시스템에서 COW를 비활성화하는 마운트된 파일 시스템을 사용합니다 . 이는 사실이지만 반드시 필요한 경우(예: 스냅샷 생성)가 아니면 COW 사용을 피합니다.chattr
문제의 파일이 포함된 디렉터리에서 COW를 비활성화 하는 데 사용되며chattr
기존 파일에서는 작동하지 않으므로 파일을 다시 생성합니다.btrfs fi defrag
문제가 있는 파일을 정기적으로 실행하십시오.- 파일 시스템을 자동으로 조각 모음 하려면 파일 시스템을 마운트하십시오
autodefrag
.
처음 두 가지 옵션장애를 입히다COW, 후자 두 개는 COW를 허용하지만 나중에 정리합니다. BTRFS COW 및 QEMU COW는 방해해서는 안 되며 매우 느릴 뿐입니다. :)
내 개인적인 경험
SQLite 데이터베이스 파일을 사용한 경험을 바탕으로 ...
nodatacow
- 테스트되지 않았습니다.chattr
- 어쨌든 결국엔 조각난 파일뿐이군요.btrfs fi defrag
- 컨셉 테스트를 위해 잠시 해봤습니다.autodefrag
- 나는 이것을 매우 성공적으로 사용했습니다.
QEMU 이미지의 경우 이미지 파일 대신 LVM 볼륨을 사용합니다. 그래서 저는 COW 문제를 전혀 다루지 않습니다.
자원
COW가 BTRFS에서 어떻게 작동하는지 더 잘 이해하려면 읽기를 권장합니다.