Làm cách nào tôi có thể hoàn tác hoặc khôi phục lệnh nâng cấp apt apt-get nâng cấp trên Ubuntu?


26

Có cách nào trong Ubuntu để khôi phục hoặc hoàn tác nâng cấp cuối cùng sau khi thực hiện apt-get upgradenếu bạn không thích kết quả không?


Không có nhiều công việc, điều đó sẽ không có giá trị. Bạn có thể lưu / nhà của bạn và bắt đầu lại? Bạn không thích điều gì?
dùng10547

Tôi chưa làm điều đó, nhưng đây là một máy chủ sản xuất và tôi cần chắc chắn rằng không có sự không tương thích với thiết lập PHP / MySQL / Apache2 tùy chỉnh của chúng tôi và nhanh chóng quay lại nếu có. Tôi muốn nâng cấp vì tôi nghĩ nó sẽ khắc phục vấn đề khác mà tôi gặp phải.
jjclarkson

Trừ khi bạn đã nâng cấp từ xa, tôi không thấy kết quả nào không thích, vì đó là những cập nhật bảo mật rất có thể .
LiraNuna

Nếu bạn có cài đặt tùy chỉnh, bạn có trách nhiệm lưu các bản vá và áp dụng chúng cho phiên bản hiện tại.
LiraNuna

2
Nếu đó là máy chủ, hãy thử máy chủ dev trước khi nâng cấp máy sản xuất
solarc

Câu trả lời:


5

aptitudecung cấp cho bạn quyền truy cập vào tất cả các phiên bản của gói nếu có sẵn theo quản lý gói Debian .


2.7.3 có thể giúp bạn hạ cấp xuống ổn định. 2.7.16 giải thích việc lưu và khôi phục trạng thái dpkg. dpkg-repack cho phép bạn "nén" một gói duy nhất.
joeytwiddle

5

Tôi đã xem qua Blogstatic Blog của Hartman: Cách hoàn tác cập nhật trong Ubuntu Lucid

Bước đầu tiên để hoàn tác bản cập nhật vi phạm là tìm hiểu chính xác bản cập nhật nào. Sau khi tìm kiếm một số diễn đàn, tôi đã tìm thấy một lịch sử để xem lịch sử cập nhật của mình: Trình quản lý gói synap mở ("sudo synaptic" trong terminal). Từ thanh menu, nhấp vào Tệp -> Lịch sử và bạn sẽ thấy tất cả các cập nhật của bạn được sắp xếp theo ngày.

Thật không may, tôi đã cài đặt khoảng 20 bản cập nhật ngày hôm nay và tôi không biết cái nào đã gây ra sự cố. Bằng cách tìm kiếm thông qua từng gói có tên trong danh sách Lịch sử, tôi có thể hạ cấp một vài lần cho đến khi vấn đề được giải quyết và tôi đã xác định được bản cập nhật vi phạm. Để làm điều này:

Sử dụng thanh tìm kiếm để tìm gói bạn muốn hạ cấp. Khi bạn đã tìm thấy những gì bạn đang tìm kiếm, bấm vào gói để chọn nó. Từ thanh menu, nhấp Gói -> Buộc Phiên bản và chọn phiên bản trước của gói từ menu thả xuống. Nhấp vào nút "Áp dụng" để áp dụng hạ cấp.


1
Tôi hy vọng mọi người ở đây sẽ biết những điều cơ bản về cách tra cứu bản cập nhật vi phạm cuối cùng:
Manav Brar

2
Điều đó đã được chỉnh sửa về cái gì? Bạn có một câu hỏi? Bạn có muốn chúng tôi chơi một trò chơi đoán không?
slhck

5

Tôi đã phải làm điều này ngày hôm nay trên hệ thống Debian của tôi. Đầu tiên, tôi xác định phạm vi thời gian khi việc nâng cấp vi phạm xảy ra và truy xuất các mục nhật ký đưa ra số phiên bản cũ và mới của các gói được nâng cấp:

$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log
2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:26 upgrade traceroute:amd64 1:2.0.22-1 1:2.1.0-1
2016-03-20 16:58:33 upgrade ethtool:amd64 1:4.2-1 1:4.5-1
2016-03-20 16:58:34 upgrade libsdl1.2debian:amd64 1.2.15+dfsg1-3 1.2.15+dfsg1-4
2016-03-20 16:58:34 upgrade subversion:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:36 upgrade libsvn1:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:56 upgrade linux-image-amd64:amd64 4.3+70 4.4+71
2016-03-20 16:58:56 upgrade linux-libc-dev:amd64 4.3.5-1 4.4.6-1
2016-03-20 16:59:03 upgrade amd64-microcode:amd64 2.20141028.1 2.20160316.1

Tiếp theo, tôi đã cố gắng tìm các tệp gói vẫn lưu trong bộ nhớ cache (may mắn cho tôi là tôi đã không chạy autoclean):

$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_amd64.deb': No such file or directory
-rw-r--r-- 1 root root   28820 Dec 18  2014 /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb
-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root  185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb
-rw-r--r-- 1 root root 1317644 Mar  3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root    6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb
-rw-r--r-- 1 root root 1075506 Feb  7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb
-rw-r--r-- 1 root root  983174 Mar  3 11:30 /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root   53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb

Có vẻ như tôi không có gói ethtool cũ hơn vì một số lý do. Tuy nhiên, hãy tiếp tục bằng cách cài đặt các tệp gói cũ hơn:

$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
dpkg: warning: downgrading amd64-microcode from 2.20160316.1 to 2.20141028.1
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20160316.1) ...
dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:amd64 from 2.4.10-1 to 2.4.9-3
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.10-1) ...
dpkg: warning: downgrading libsdl1.2debian:amd64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...
dpkg: warning: downgrading libsvn1:amd64 from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-3) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
dpkg: warning: downgrading linux-image-amd64 from 4.4+71 to 4.3+70
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.4+71) ...
dpkg: warning: downgrading linux-libc-dev:amd64 from 4.4.6-1 to 4.3.5-1
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.4.6-1) ...
dpkg: warning: downgrading subversion from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-3) ...
dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:amd64:
 libwebkitgtk-3.0-0:amd64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:
  Package libwebkitgtk-3.0-common is not installed.

dpkg: error processing package libwebkitgtk-3.0-0:amd64 (--install):
 dependency problems - leaving unconfigured
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Errors were encountered while processing:
 libwebkitgtk-3.0-0:amd64

Như thông báo lỗi đã nói, một trong các gói của tôi phụ thuộc vào gói -common ngay trước khi nâng cấp, nhưng bản nâng cấp đã loại bỏ nó (và apt-get không thể tìm thấy nó nữa). May mắn thay, tệp gói của nó vẫn nằm trong / var / cache / apt vì vậy tôi chỉ có thể thêm nó vào danh sách và thử lại:

$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*
-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20141028.1) ...
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.3+70) ...
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.3.5-1) ...
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...
Selecting previously unselected package libwebkitgtk-3.0-common.
Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...
Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Setting up libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up libwebkitgtk-3.0-0:amd64 (2.4.9-3) ...
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64

Sự thành công! Thật ra điều này không giải quyết được vấn đề của tôi. Nhưng nó đã hạ thành công các gói, QED.


3

Hôm nay tôi cũng phải hoàn tác nâng cấp gói trên một vài máy chủ Debian. Tôi đã hoàn nguyên các gói thành phiên bản cuối cùng bằng cách sử dụng apt, trong khi lệnh awk sau đây rất hữu ích.

( Trong lệnh bên dưới, thay thế chuỗi ngày bằng ngày trong ngày mà bạn muốn hoàn nguyên các bản nâng cấp )

awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) {gsub(/[\s\t)( ]+/,"",$5); printf("%s=%s ", $2 , $5)}}' /var/log/apt/term.log

xem lại đầu ra để xác minh rằng đây là các gói và phiên bản sẽ được hoàn nguyên. Sau đó sử dụng aptolarship để thực hiện hạ cấp các gói được liệt kê:

aptitute install [paste output here]

Tôi hy vọng rằng đây cũng là một tiết kiệm thời gian hữu ích cho những người khác.


2

Tôi tin rằng không, ngoài việc tham gia một backup toàn bộ các hệ thống tập tin có liên quan (những người mà chứa /, /bin, /lib, /sbin, /usr, /var, /etc/boot(mà tất cả có thể được trên trên hệ thống tập tin) và boot record của bạn) để bạn có thể cuộn máy trở lại sau đó.


Tôi có thể (và có thể sẽ) lấy một bản sao lưu kim loại trần, nhưng tôi muốn có một tùy chọn phần mềm cho phép tôi hoàn tác nâng cấp trong khung thời gian nhanh hơn. Khôi phục từ bản sao lưu kim loại trần có thể mất vài giờ.
jjclarkson

1
Bạn có thể đảm bảo rằng bạn có các bản sao của tất cả các gói bạn sắp nâng cấp trong các phiên bản trước của chúng (chúng có thể vẫn nằm trong bộ đệm apt của bạn ở đâu đó /var) và bất kỳ tệp cấu hình có liên quan nào được lưu trữ. Sau đó, bạn có thể thử buộc quay lại bằng cách nói rõ ràng dpkgđể cài đặt các phiên bản đó. Bạn có thể có một số việc phải làm sau đó khi bạn muốn nâng cấp bình thường xảy ra, vì vậy đó không phải là điều tôi khuyên bạn nên làm.
David Spillett

Một bản sao lưu được tạo bằng rsync (bật tính năng hẹn giờ) có thể được khôi phục khá nhanh, so với bản sao lưu được tạo bằng tar.
joeytwiddle

2

Tôi chạy các máy chủ linux của mình trong môi trường ảo hóa và chạy shapshot ngay trước khi nâng cấp apt-get hoặc bất kỳ cập nhật / nâng cấp lớn nào của bên thứ 3 cho vấn đề đó.

Sau đó, nếu có gì đó không ổn, tôi chỉ cần hoàn nguyên và cuộc sống tiếp tục cho đến khi tôi có thể tìm hiểu thêm thông tin.

Điều này rất hữu ích khi tôi nâng cấp hộp Ubuntu của mình lên 12.04 và bằng cách nào đó, MySQL hoàn toàn không hoạt động sau khi nâng cấp. Tôi quay lại, tìm thấy câu trả lời sau đó, chạy lại bản nâng cấp, sửa lỗi MySQL và cuộc sống rất tốt.


1

Bạn có thể thử kiểm tra cài đặt

Sau khi bạn ./mình; làm cho chương trình của bạn, CheckInstall sẽ chạy make install (hoặc bất cứ điều gì bạn bảo nó chạy) và theo dõi mọi tập tin được sửa đổi bởi cài đặt này, sử dụng trình cài đặt excelent ...

Vì vậy, có lẽ bạn có thể bảo nó chạy nâng cấp an toàn năng khiếu và nó sẽ theo dõi mọi sửa đổi được thực hiện bởi nâng cấp.


1

Có một dự án tên là Nexenta kết hợp hạt nhân OpenSolaris với không gian người dùng Ubuntu. Nó cung cấp một công cụ để tích hợp apt ZFS và Debian của Solaris để cung cấp nút hoàn tác để nâng cấp. Xem tại đây: http://www.nexenta.org/os/TransactionalZFSUpgrades

Tổng quát hơn, những gì bạn cần là một hệ thống tập tin phiên bản. Btrfs cho Linux đang được phát triển.



0

Tôi đã thực hiện thành công vài lần nhưng tôi sẽ không đề xuất. Đây là những gì tôi đã làm (nếu tôi nhớ chính xác):

1) Xóa mọi phần mềm không chính thức không có trong kho ubfox mặc định (có thể không bắt buộc, nhưng tôi đề nghị phần mềm này có thể theo cách của bạn).

2) Thay đổi /etc/apt/source.list (và nguồn.list.d / *) của bạn sang phiên bản trước (nhận xét tất cả các kho lưu trữ không chính thức).

3) cập nhật apt-get / cập nhật năng khiếu

4) Sử dụng năng khiếu, hạ cấp các gói cốt lõi (như X11, thư viện, v.v.). Nó sẽ bắt đầu bắn rất nhiều gói bị hỏng ... vì vậy bạn sẽ cần phải giải quyết từng trường hợp (bạn cần biết cách thực hiện điều đó trong khả năng). Cách bạn hạ cấp nó bằng cách đi tới bảng mô tả và cài đặt phiên bản (bằng cách nhấn +) ở phía dưới.

5) Lặp lại số 4 cho đến khi tất cả phần mềm thuộc về phiên bản mục tiêu của bạn (kiểm tra cột phiên bản theo khả năng).

Đây là lý do tại sao tôi không khuyên dùng phương pháp này:

  • Phải mất rất nhiều thời gian (đó là một quá trình đau đớn)
  • Một số ứng dụng có thể không hoạt động đúng (vì chúng vẫn có thể có cấu hình gần đây nhất). Trong trường hợp đó, bạn sẽ cần "thanh lọc" và cài đặt lại.
  • Có những cập nhật liên quan đến hệ thống sẽ không hoạt động sau khi hạ cấp
  • Nó rất rủi ro vì bạn có thể kết thúc với một hệ thống không thể sử dụng

Tôi thực sự khuyên bạn nên thực hiện cài đặt sạch và di chuyển cấu hình của bạn từng chút một. Nó cũng mất thời gian, nhưng cuối cùng bạn có một phiên bản ổn định.

Lý do tôi làm nó chủ yếu là thử nghiệm và là kết quả của sự tuyệt vọng.


0

DPkg :: Pre-Install-Pkgs và ZFS trên ảnh chụp nhanh Linux

Nếu bạn đã cài đặt hệ điều hành của mình trên hệ thống tệp ZFS (ví dụ: ZFS trên Linux ), bạn có thể định cấu hình apt-getđể chạy zfs snapshottrước khi cài đặt hoặc nâng cấp mọi thứ, điều này sẽ sao lưu hệ thống tệp của bạn ngay lập tức. Nó có thể hoạt động với các cơ chế sao lưu khác với ảnh chụp nhanh ZFS, nhưng tôi sẽ để thử nghiệm đó cho người khác.

Kịch bản

Tạo một tập tin như

/etc/apt/apt.conf.d/71backup

với nội dung

// Tell `apt-get' to take a ZFS snapshot before installing or upgrading a
// set of packages:
DPkg::Pre-Install-Pkgs {"/sbin/zfs snapshot rpool/ROOT/debian@apt-get_$(date '+%Y-%m-%d-%H%M')";};

nơi rpool/ROOT/debiannên được thay thế bằng tên của hệ thống tệp ZFS mà hệ điều hành của bạn được gắn vào. Bạn đã đặt tên đó khi lần đầu tiên cài đặt HĐH và có thể tìm thấy nó dưới thuộc tính NAMEbằng lệnh

# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...

Nhưng nó có hoạt động không?

Bạn nên chụp nhanh trước khi làm theo lời khuyên cấu hình của một số người ngẫu nhiên trên internet:

# zfs snapshot rpool/ROOT/debian@$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/debian@2018-08-01-230001_test

Nó đây rồi Nếu error: fn_borkedsớm xảy ra, bạn có thể đưa hệ thống của mình về trạng thái hạnh phúc hiện tại với

# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test

Bây giờ hãy thử bằng cách cài đặt hai trò chơi nhỏ có khả năng có sẵn trong repo của bạn:

# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614

Ảnh chụp nhanh đó chứa hệ thống tệp của bạn như trước khi hai trò chơi được cài đặt.

# exit
$ sudoku

Thời gian vui vẻ cho bà, nhưng bạn ghét sudoku.

$ sudo -i
# zfs rollback rpool/ROOT/debian@apt-get_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found

Sau khi nhiều ảnh chụp nhanh được thực hiện, bạn có thể quay lại bất kỳ ảnh chụp nào trước đó bằng cách thêm -rcờ. Trong trường hợp của chúng tôi, ví dụ, hãy thử

# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test

Tuy nhiên, được cảnh báo rằng điều này không chỉ giúp hệ thống tệp của bạn trở về trạng thái khi rpool/ROOT/debian@2018-08-01-230001_testđược chụp mà còn xóa tất cả các ảnh chụp nhanh sau đó. Nếu bạn theo dõi cùng với bài đăng này, ảnh chụp nhanh rpool/ROOT/debian@apt-get_2018-08-02-033614sẽ biến mất.

Tôi đã thử nghiệm apt-get upgradetrên Debian GNU / Linux với

# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get

Nó hoạt động. Một ảnh chụp nhanh đã được tạo cho installlệnh, một ảnh chụp khác cho upgradelệnh.

Hãy cẩn thận : Tôi đã thử nghiệm điều này lần đầu tiên ngày hôm nay và biết rất ít về hoạt động bên trong của apt. Nếu điều này phá vỡ một cái gì đó cho bạn hoặc gây ra rủi ro cho tâm trí lành mạnh của tôi chưa được xem xét, xin vui lòng bình luận về nó dưới đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.