Khi nào Windows ghi registry thay đổi vào đĩa?


43

TL; DR:

Tôi nhận thấy rằng nếu tôi thực hiện thay đổi sổ đăng ký và sau đó tắt cứng hệ thống Windows 10 của mình, thay đổi sổ đăng ký sẽ không xuất hiện sau khi khởi động lại.

Tôi cũng nhận thấy rằng việc xóa tệp ngủ đông có thể ảnh hưởng đến khả năng công cụ khôi phục Linux có thể thay đổi sổ đăng ký Windows ở trạng thái ngoại tuyến. Công cụ dường như không thể thực hiện các thay đổi liên tục sau khi xóa tệp ngủ đông. Tôi sẽ liệt kê các ví dụ cụ thể dưới đây.

Ví dụ 1:

  • Tôi thêm khóa có tên "1111" vào "HKLM \ SOFTWARE". Sau đó tôi cứng nguồn xuống hộp của mình bằng cách giữ nút nguồn trong 5 giây.
  • Test Key
  • Khi tôi kéo sổ đăng ký sao lưu, khóa đó và các giá trị của nó sẽ biến mất:
  • Test Key Gone
  • (Những hình ảnh này đã được chỉnh sửa cho mục đích định dạng)

Ví dụ 2 :

  • Thực hiện thay đổi trong sổ đăng ký (sử dụng regedit)
  • Ngủ đông hệ thống
  • Khởi động vào công cụ khôi phục Linux
  • Xóa tệp ngủ đông để gắn đĩa.
  • Đọc sổ đăng ký windows (từ công cụ khôi phục)
  • Thay đổi đăng ký đã biến mất.

Điều này có vẻ tương đương với một tắt cứng trên hộp.

Ví dụ 3:

tôi hiểu rồi người lạ hành vi khi tôi:

  • Ngủ đông hộp
  • Khởi động công cụ khôi phục Linux và xóa tệp ngủ đông
  • Thay đổi sổ đăng ký (từ công cụ khôi phục)
  • Khởi động lại hộp

Những thay đổi đó cũng không được phản ánh trong sổ đăng ký.

Vậy chuyện gì đang xảy ra ở đây?

  • Khi nào Windows 10 ghi registry thay đổi vào đĩa?
  • Tại sao việc xóa tệp ngủ đông (trong ví dụ 3) ngăn các thay đổi đăng ký được thực hiện từ công cụ khôi phục không được phản ánh trong lần khởi động tiếp theo?

Hy vọng sẽ có được một số làm rõ!


2
"anh ấy thay đổi sổ đăng ký không xuất hiện sau khi khởi động lại." - Thay đổi sổ đăng ký không có hiệu lực cho đến khi khởi động lại và thông thường, chỉ File Explorer phải được khởi động lại. Tất cả phụ thuộc vào hành vi mà thay đổi đăng ký dự định thực hiện nếu thực sự cần phải khởi động lại. Khóa thực tế được sửa đổi, khi nó được sửa đổi, sẽ trả lời câu hỏi của bạn.
Ramhound

8
Bạn có ý nghĩa gì khi tắt máy cứng? Giữ nút nguồn cho đến khi nó tắt? Quá trình đó bỏ qua việc ghi ra bất kỳ ghi đĩa đệm đang chờ xử lý.
DavidPostill

2
@Ramhound Tôi hiểu rằng nó không có hiệu lực, nhưng tại sao nó không được ghi vào đĩa? Tôi thực hiện chỉnh sửa, tắt nguồn và sau đó thay đổi không còn nữa. Cho dù nó có hiệu lực trong bộ nhớ hay không không quan trọng tại thời điểm đó
Shrout1

2
@ Shrout1 - Tại sao bạn buộc phải tắt máy thay vì tắt máy an toàn?
Ramhound

6
@Ramhound Tôi đang chạy thử nghiệm để xem điều gì sẽ xảy ra nếu hệ thống không tắt một cách duyên dáng. Ngẫu nhiên, tôi biết, nhưng tôi cần biết chính xác điều này được cam kết như thế nào để chúng tôi không mất bất cứ thứ gì trên hệ thống của mình nếu nó không được xử lý chính xác.
Shrout1

Câu trả lời:


54

TL; DR: Tắt hệ thống của bạn đúng cách.


Ngủ đông không liên quan gì đến việc tắt, nó liên quan chặt chẽ đến việc tạm dừng RAM (ngủ) ngoại trừ nội dung của RAM được đẩy vào đĩa để đọc lại và hoạt động trở lại từ chính xác nơi hệ thống rời .

Nếu bạn muốn các thay đổi được duy trì thì bạn cần phải tắt chế độ ngủ đông Windows Fastboot (là một tập hợp con của ngủ đông). Hoặc bạn thực sự có thể khởi động lại thay vì ngủ đông và khởi động lại.

Lý do thay đổi không được duy trì là vì chúng chưa được ghi vào đĩa ngoại trừ trong tập tin ngủ đông. Mà bạn đang xóa, có nghĩa là hệ thống tập tin có thể phải tự sửa chữa và quay trở lại trạng thái "đã biết trước".

Trong khi hệ thống ngủ đông, sẽ có một số cấu trúc hệ thống tệp chính có thể chưa được ghi ra đĩa và thay vào đó là trong RAM. Hệ thống sẽ, sau khi nối lại từ chế độ ngủ đông, hy vọng đĩa sẽ ở trạng thái rất đặc biệt và có thể bộ đệm đĩa và các tệp hệ thống quan trọng được lưu vào tệp ngủ đông thay vì vào đĩa thực.

Nếu bạn làm một tắt máy đúng cách sau đó Windows sẽ xóa bộ nhớ làm việc đúng cách vào đĩa và sau đó ngắt sạch đĩa trước khi tắt nguồn.

Để buộc tắt máy đúng cách, hãy mở một dấu nhắc lệnh và gõ

shutdown /s /f /t 0

/s là "tắt máy", /f buộc, và /t 0 có nghĩa là "bây giờ" (thời gian = 0 giây)

Hoặc bạn chỉ có thể vô hiệu hóa fastboot và ngủ đông.

Đọc thêm tại HowtoGeek: Tắt máy Doesn Tắt hoàn toàn Windows 10 (Nhưng khởi động lại không)


Liên quan đến việc bạn thực hiện tắt máy, vấn đề là Windows không được bảo đảm ghi bất kỳ thay đổi nào vào đĩa trong cùng một mili giây (hoặc thậm chí là vài phút) mà bạn thực hiện thay đổi. Nó gần như chắc chắn sẽ được viết trong một vài phút nhưng xác suất của nó thực sự đã được viết sẽ tăng theo thời gian. Nó không có khả năng được viết ngay lập tức, sau đó ở gần đến thời điểm bạn thực hiện thay đổi, xác suất sẽ tăng mạnh và gần như chắc chắn sẽ được viết trong vòng một giờ.

Mặc dù vậy, điều này là bằng cách buộc tắt máy cứng, bạn sẽ không cho hệ thống cơ hội ghi các thay đổi vào đĩa một cách an toàn.

Hầu hết các hệ thống tập tin hiện đại được viết để thực hiện các thay đổi theo cách an toàn nhất có thể. Trong quá khứ, chúng được gọi là "nguyên tử", vì trong sự thay đổi đã xảy ra hoặc nó đã không xảy ra.

Hôm nay chúng ta biết họ như Hệ thống tập tin tạp chí bởi vì họ giữ một bản ghi hoạt động sẽ xảy ra có thể được hoàn nguyên hoặc chuyển tiếp trong trường hợp lỗi hệ thống và khởi động lại. Khi khởi động từ sự cố mất điện, hệ thống sẽ kiểm tra nhật ký và cho mỗi giao dịch, nó sẽ kiểm tra xem dữ liệu tệp thực tế có được ghi vào đĩa hay không và "tốt". Nếu đó là cuộn chuyển tiếp và được hoàn thành, nếu không thì nó sẽ quay trở lại dữ liệu cũ.

Bằng cách sử dụng thứ tự này, đĩa hầu như luôn ở trạng thái dễ sửa chữa.

Nhưng bằng cách buộc hệ thống của bạn tắt nguồn đột ngột, bạn không thể đảm bảo liệu giao dịch đã tiến triển đủ xa để tiến hành sửa chữa hay chưa, và rất có thể một hệ điều hành như Linux sẽ không quan tâm nhiều đến Windows về lịch sử giao dịch và nhiều khả năng thay vì không chỉ thực hiện các thay đổi mà đẩy mọi thứ về phía sau hơn là chuyển tiếp.

Nếu bạn khởi động lại vào Windows, nó có thể thử hoặc có thể sửa chữa đĩa đúng cách vì nó có kiến ​​thức sâu sắc hơn về hệ thống tệp.


Cảm ơn bạn! Tôi đánh giá cao phản hồi của bạn :) Tôi đã tắt chế độ ngủ đông, khởi động lại và chạy lại cùng một bài kiểm tra. Ví dụ 1 có kết quả tương tự, không có tệp ngủ đông liên quan. Có vẻ như các thay đổi đăng ký chỉ được ghi vào một lúc nào đó trong quá trình đăng xuất / tắt máy ... Tôi cũng đồng ý rằng hệ thống có thể đang tìm trạng thái "tốt cuối cùng" khi thức dậy từ chế độ ngủ đông bị hỏng - nó có xu hướng chạy kiểm tra tính toàn vẹn.
Shrout1

1
Hm Tôi cũng đã chạy tiến trình thám hiểm và xem xét Đĩa I / O trong các thuộc tính cho Regedit. Nó đã đọc I / O nhưng không viết I / O. Điều này khiến tôi nghĩ rằng nó có thể đang chờ tắt máy ... Bạn có biết bất kỳ tài liệu M $ nào quá khô khan có thể trình bày rõ ràng không? Cảm ơn một lần nữa vì tất cả sự giúp đỡ của bạn!!
Shrout1

11
Tạp chí NTFS không đảm bảo về dữ liệu tệp. Nó chỉ đơn thuần là để giữ cho siêu dữ liệu NTFS nhất quán, do đó bạn không bị hỏng hệ thống tập tin . Các tệp riêng lẻ vẫn có thể có các thay đổi một phần được ghi lại cho chúng, phá vỡ tệp. Có NTFS giao dịch nhưng điều đó không được khuyến khích và rất hiếm khi được sử dụng. Đây cũng là lý do tại sao các công cụ cơ sở dữ liệu giữ nhật ký riêng để thống nhất dữ liệu. Xem thêm blog.msdn.microsoft.com
Bob

2
@ Shrout1 Giả sử các thay đổi đăng ký đang chờ xử lý trong bộ đệm ghi lại. Thay vào đó, chúng hoàn toàn có thể được quản lý riêng và điều này không liên quan gì đến hệ thống tập tin, bộ nhớ đệm hay cách khác. Ví dụ: Cấu hình tốt được biết đến lần cuối chỉ được cập nhật khi khởi động thành công. (Tôi không biết đủ về nội bộ đăng ký để chắc chắn khi thay đổi được lưu. Và sau đó TxR có thể tham gia.)
Bob

1
Có một lý do bạn buộc phải tắt máy? MC đang làm hoặc bạn sẽ đặt một số ứng dụng ở trạng thái không thể phục hồi - tôi thực sự sẽ không gọi đó là tắt máy "đúng cách".
NotThatGuy

39

Như tài liệu trên trang MSDN cho RegFlushKey:

Gọi điện thoại RegFlushKey là một hoạt động đắt tiền ảnh hưởng đáng kể đến hiệu suất toàn hệ thống vì nó tiêu tốn băng thông đĩa và chặn sửa đổi tất cả các khóa bởi tất cả các quy trình trong trung tâm đăng ký đang được xóa cho đến khi hoàn thành thao tác xả. RegFlushKey chỉ nên được gọi một cách rõ ràng khi một ứng dụng phải đảm bảo rằng các thay đổi đăng ký được duy trì vào đĩa ngay sau khi sửa đổi. Tất cả các sửa đổi được thực hiện cho các khóa được hiển thị cho các quá trình khác mà không cần phải xóa chúng vào đĩa.

Ngoài ra, sổ đăng ký có cơ chế 'lười biếng tuôn ra' để xóa các sửa đổi sổ đăng ký vào đĩa theo định kỳ. Ngoài hoạt động xả thường xuyên này, các thay đổi đăng ký cũng được xóa vào đĩa khi tắt hệ thống. Cho phép 'lười biếng tuôn ra' để xóa các thay đổi sổ đăng ký là cách hiệu quả nhất để quản lý ghi vào sổ lưu trữ trên đĩa.

Điều này cho thấy rằng ngoài việc xóa một khóa cụ thể vào đĩa ngay . Ngoài ra, nó được tuôn ra khi tắt máy, như bạn đã tìm ra.

Bạn có thể dùng RegFlushKey chức năng trong phần mềm thao tác với khóa đã nói hoặc tạo một công cụ bổ sung với nó để buộc ghi khóa đăng ký vào đĩa ngay lập tức, nếu điều này rất quan trọng đối với trường hợp sử dụng của bạn.


Chào! Tôi sẽ cung cấp cho bạn cái này nếu bạn ném một liên kết đến bài viết MSDN sau: Lưu các thay đổi đăng ký ứng dụng trên Windows 8 hoặc Windows Server 2012 và thêm một blockquote ngắn gọn. Câu trả lời của bạn đã dẫn tôi xuống hố thỏ đến bài báo đó và về cơ bản nó cũng nói giống như bạn đã làm. Cảm ơn rất nhiều!
Shrout1

Nhưng có ai biết làm thế nào người dùng Có thể gọi RegFlushKey ?
Scott

@ Xóa Không chắc chắn nó có thể được thực hiện từ dòng lệnh.
Shrout1

3
@Scott: Tôi sẽ bị sốc nếu sync đã làm tuôn ra registry vào đĩa Nó sẽ không có ý nghĩa gì. Tại sao nên xả nước hệ thống tập tin bộ đệm (được sử dụng bởi trình quản lý cấu hình, không phải cách khác) đột nhiên xóa bộ nhớ cache của trình quản lý cấu hình? Nó thậm chí không biết cấu trúc của bộ đệm cấp cao hơn là gì, nếu thậm chí còn tồn tại.
Mehrdad

1
@ Hủy bỏ Có một cách. API đã được liên kết. Có những công cụ hiện có cung cấp cho bạn một GUI để gọi các hàm Win32 tùy ý. Điều đó là ... Đó là một chi tiết thực hiện. Nếu bạn phơi bày nó, mọi người sẽ dựa vào nó và sau đó bạn không thể thay đổi nó. Cũng đáng lưu ý rằng đĩa hệ thống là một con thú hoàn toàn khác với phương tiện di động. Đĩa hệ thống được sử dụng cho nhiều thứ yêu cầu tay cầm luôn mở (ví dụ: tệp trang). Windows không hỗ trợ ngắt kết nối phân vùng hệ thống, do đó không cần "tính năng" này. Thêm vào đó ... cố gắng giữ bình luận trung lập. Bạn ghét Windows, chúng tôi hiểu rồi.
Basic

14

TL; DR: Đó là rất cẩn thận để làm điều này vào đúng thời điểm .

Các tài liệu về FSCTL_MARK_AS_SYSTEM_HIVE có điều này để nói:

Các FSCTL_MARK_AS_SYSTEM_HIVE mã kiểm soát thông báo cho hệ thống tệp rằng tệp được chỉ định chứa tổ ong của hệ thống đăng ký. Hệ thống tập tin phải xóa dữ liệu trung tâm hệ thống vào đĩa tại đúng thời điểm để tránh bế tắc và đảm bảo tính toàn vẹn dữ liệu.

Tôi không tin có bất kỳ chi tiết nào có sẵn công khai hơn thế này.

Hãy nhớ rằng tuôn ra hệ thống tập tin không ngụ ý tuôn ra đăng ký , bởi vì registry có thể thực hiện bộ nhớ đệm trên hàng đầu của hệ thống tập tin. Để xóa sổ đăng ký trước, bạn cần bằng cách nào đó gây ra NtFlushKey hoặc là ZwFlushKey để được gọi vào chìa khóa quan tâm của bạn.


Oh bắt tốt! Đó là MSDN-ism yêu thích mới của tôi: đúng thời điểm . Yêu thích trước đây của tôi là "Hãy thận trọng khi chỉ định mệnh đề TOP trong truy vấn có chứa toán tử UNION, UNION ALL, EXCEPT hoặc INTERSECT. trả về kết quả bất ngờ " đó là một uyển ngữ cho "tính năng này bị hỏng nặng và không làm được điều mà bất kỳ người hợp lý nào mong đợi và thay vì sửa nó, chúng tôi sẽ ghi lại nó".
davidbak

@davidbak: lol, trong sự bảo vệ của MSDN, tôi thực sự không thấy những chi tiết nào họ có thể cung cấp mà người dùng nên dựa vào.
Mehrdad

Oh bạn nói đúng; rõ ràng đây chỉ là một thứ được ghi nhận là một phần của thỏa thuận EU từ lâu, nơi Microsoft được yêu cầu ghi lại tất cả các API - bất kể chúng có nội bộ như thế nào. Trang này bạn đã liên kết thậm chí nói "Chỉ các thành phần cấp hạt nhân mới có thể sử dụng mã kiểm soát hệ thống tệp này", đây là một gợi ý mạnh mẽ để tránh xa bạn. Vẫn, " đúng thời điểm "- một ngày nào đó tôi sẽ ghi lại một số API của tôi với" chỉ gọi phương thức này tại đúng thời điểm " và hãy xem chuyện gì xảy ra....
davidbak

@davidbak: Tôi nghĩ bạn hơi ... phấn khích. :-P của tôi phỏng đoán là điều này đã được ghi lại để cho các trình điều khiển hệ thống tệp biết tệp nào chứa tổ chức đăng ký HỆ THỐNG, điều này có thể quan trọng ở chỗ họ sẽ không ghi bất cứ điều gì vào sổ đăng ký cùng lúc với tệp đó được xóa vào đĩa . Tôi không có bằng chứng về điều này mặc dù; đó chỉ là một lý do tôi thấy có thể hiểu được. Tuy nhiên, một nghi ngờ tôi có về nó là tại sao một trình điều khiển đĩa sẽ không cần phải biết điều này.
Mehrdad
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.