시스템을 되돌려야 한다면?! RHEL dnf history 와 SLES snapper
리눅스 서버를 운영하다 보면 패키지를 업데이트하거나, 기존 설정을 변경하는 일이 비일비재합니다.
문제는 이러한 작업에서 무언가 문제가 있다면 시스템이 꼬이는 아찔한 순간을 마주한다는 것입니다.
이때 저희를 도와줄, 마치 타임머신과 같은 RHEL 의 dnf history 와 SLES 의 snapper 를 비교하며 설명합니다.

-
시스템 롤백의 대상
RHEL의 dnf history 와 SLES의 snapper 는 어떤 것을 되돌리는 지에 대해 차이가 있습니다.
RHEL의 dnf history 는 RPM 패키지에 대한 작업 이력, 즉 트랜잭션을 추적하는 방식입니다. 예를 들어 패키지를 설치, 업데이트, 삭제 등의 작업을 할 때 해당 작업을 기록하고 롤백 명령을 내리면 이 기록을 역순으로 계산하여 이 전 상태의 패키지 구성을 재현하는 것입니다.
SLES의 snapper 는 패키지에 대한 작업을 포함하여 시스템 설정에 대한 수정이 있을 때 작업 전후로 파일시스템의 스냅샷을 생성합니다.(포함되지 않는 볼륨도 있습니다!) 중요한 것은 이 스냅샷 기능은 btrfs 라는 특정 파일시스템을 사용하는 시스템에서만 사용 가능합니다. 또한 스냅샷이 저장될 저장 공간이 필요할 수 있습니다.
핵심적인 차이를 정리하자면
RHEL의 dnf history 는 rpm 패키지 구성이 대상이며 패키지의 기본값을 복원하는 것이고,
SLES의 snapper 는 파일 시스템 전체 상태가 대상이며 수동 수정내용을 포함하여 패키지까지 복구한다는 것입니다.
-
롤백 방법
롤백을 하는 방법에 있어 RHEL의 dnf history 와 SLES의 snapper 의 비슷한 점이 있다면 “ID”를 사용하여 되돌아간다는 것입니다.
RHEL 의 경우
[root@localhost ~]# dnf history list
ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------------------
5 | | 2026-01-27 16:46 | Install | 4
4 | install httpd | 2026-01-27 13:49 | Install | 11
3 | install targetcli | 2025-04-21 22:45 | Install | 7
2 | remove gnome-initial-setup | 2025-04-21 22:42 | Removed | 1
1 | | 2025-04-21 22:13 | Install | 1318 EE
# dnf history list 명령어를 입력해 보면 출력되는 리스트에서 맨 앞에 ID 를 확인할 수 있습니다. Dnf 명령어를 사용하여 패키지 설치나 삭제 등을 진행했다는 것과 진행한 시점도 확인할 수 있습니다.
해당 작업을 다시 진행하거나(redo), 되돌리거나(undo), 특정 작업 시점으로 돌아가려면(rollback) 아래와 같이 명령어를 입력합니다.
# dnf history redo ID
# dnf history undo ID
# dnf history rollback ID
SLES 의 경우
localhost:~ # snapper list
# | Type | Pre # | Date | User | Used Space | Cleanup | Description | Userdata
--+--------+-------+----+------+------------+---------+-----------------+-----------
0 | single | | | root | | | current |
1* | single | | Wed Jan 21 21:50:10 2026 | root | 46.89 MiB | | first root filesystem |
2 | single | | Wed Jan 21 21:52:36 2026 | root | 69.92 MiB | number | after installation | important=yes
31 | single | | Wed Jan 21 23:10:47 2026 | root | 59.37 MiB | | Before package change |
70 | pre | | Tue Mar 17 01:01:49 2026 | root | 144.00 KiB | number | zypp(zypper) | important=no
71 | pre | | Tue Mar 17 01:02:40 2026 | root | 64.00 KiB | number | zypp(zypper) | important=no
72 | post | 71 | Tue Mar 17 01:02:42 2026 | root | 960.00 KiB | number | | important=no
# snapper list 명령어를 입력해 보면 출력되는 리스트에서 맨 앞에 ID 를 확인할 수 있습니다. 어떤 작업 전이 “pre” 상태이고, 작업 후가 “post” 상태입니다.
특정 작업 시점으로 돌아가려면 재부팅 후
아래 부팅 메뉴에서 “Start bootloader from a read-only snapshot” 을 고르고 돌아가려는 시점의 스냅샷을 선택합니다. 71번으로 돌아가려고 했을 때 아래 선택에서 알아보기 어려울 수 있는데 잘 파악합니다.



그 다음 부팅이 완료되면
# snapper rollback
명령어를 입력해주면 됩니다.
위의 부팅 메뉴에서 선택하는 것과 다른 방법으로는 되돌아가고자 하는 ID 를 지정해서 명령어를 입력 후 재부팅 하는 방법도 있습니다.
# snapper rollback ID
# shutdown -r now
참고적으로 diff 옵션을 사용하여 두 작업 시점 사이의 설정차이를 확인할 수 있습니다.
# snapper diff 71..72
-
의견
엔지니어 입장에서 어떠한 작업에 대해 리스크를 안고 진행할 것인지에 대한 판단이 어려운 경우가 있습니다.
복원할 수 있는 수단이 있다면 기술적으로도 개인적인 입장에서도 마음이 조금 놓입니다.
항상 작업 전 백업, 복원 방안을 마련하는 자세가 엔지니어에게 필요한 것 같습니다.
RHEL의 dnf history 와 SLES의 snapper도 잘 사용할 줄 안다면 더욱 안정된 운영에 도움이 되지 않을까 싶습니다.
자유롭게 댓글을 달아주세요! 언제나 환영합니다.
기타 문의: info@neoclova.co.kr
네오클로바 기술블로그 홈 바로가기: https://neoclova.net
네오클로바 홈페이지: http://neoclova.co.kr
