설치 프로그램은 많은 시스템 파일을 변경합니다. 소프트웨어 업데이트 중에 결함이 발생하면 시스템이 부팅되지 않을 수 있습니다. 하지만,단순한 단일 파일 쓰기 작업이라도 원자성을 보장하는 것은 거의 불가능합니다.UNIX 설치 프로그램에서는 이러한 모든 문제를 어떻게 해결합니까? 파일 시스템에 따라 달라지나요?
답변1
yum
3.2.25 이상은역사트랜잭션을 확인, 완료 또는 롤백하는 명령입니다. 과거 정보가 존재합니다./var/lib/yum/역사. 이 yum-complete-transaction
도구는 정전이나 충돌 후 트랜잭션을 완료하거나 저장된 로그 정보를 삭제하여 중단된 트랜잭션을 간단히 삭제하는 데 사용할 수 있습니다./var/lib/yum/transaction-all그리고/var/lib/yum/트랜잭션 완료.
고쳐 쓰다
원자성은 원자성의 환상을 제공하는 Sqlite 데이터베이스의 능력을 기반으로 합니다. 이러한 기술에 대한 훌륭한 논의는 다음에서 찾을 수 있습니다.SQLite의 원자적 커밋.
답변2
실제로 원자 업데이트는 문제입니다. yum(및 apt, pacman 등)은 원자가 아닙니다. 다행히도 사람들은 해결책을 시도하고 있습니다. 바라보다rpm-ostree그리고CoreOS 원자성 업그레이드.
답변3
yum은 트랜잭션을 완료하기 위해 rpm을 사용합니다. rpm은 원자적이지 않습니다. History 또는 yum-complete-transaction은 사실 이후에 최선을 다하려고 합니다.
최신 버전의 yum에서 LVM 스냅샷 기능을 사용하고 문제가 발생할 경우 전체 블록 장치를 롤백할 수도 있습니다. 그러나 실제 롤백을 수행하려면 부팅 가능한 외부 LVM 환경을 사용해야 합니다(이 시점에서 yum/rpm/glibc가 모두 호스로 연결될 수 있으므로).
원자성 보장이 필요한 경우 rpm을 직접 사용할 수 없습니다(예: ostree, 0install 또는 여러 부팅 가능한 환경 계층화).