Việc thực hiện đồng bộ hóa (8) có còn cần thiết trước khi tắt linux không?


19

Tôi vẫn thấy mọi người khuyên nên sử dụng sync; sync; sync; sleep 30; haltcâu thần chú khi nói về việc tắt hoặc khởi động lại Linux.

Tôi đã chạy Linux kể từ khi thành lập và mặc dù đây là quy trình được đề xuất trong BSD 4.2 / 4.3 và SunOS 4 ngày, tôi không thể nhớ rằng tôi đã phải làm điều đó trong ít nhất mười năm qua, trong đó tôi có lẽ trải qua quá trình tắt / khởi động lại Linux có thể hàng ngàn lần.

Tôi nghi ngờ rằng đây là lỗi thời vì hạt nhân không thể ngắt kết nối và đồng bộ hóa hệ thống tập tin gốc và các hệ thống tập tin quan trọng khác được yêu cầu ngay cả trong chế độ người dùng đơn (ví dụ / tmp), và do đó cần phải nói rõ ràng để xóa nó càng nhiều dữ liệu càng tốt vào đĩa.

Ngày nay, chưa tìm thấy mã có liên quan trong nguồn kernel (đào qua http://lxr.linux.no và google), tôi nghi ngờ rằng kernel đủ thông minh để xóa sạch ngay cả hệ thống tập tin gốc và hệ thống tập tin đủ thông minh để thực hiện đồng bộ hóa (2) một cách hiệu quả trước khi tự ngắt kết nối trong thời gian bình thường shutdown/ reboot/ poweorff.

Điều "sync; sync; sync"này chỉ cần thiết trong các trường hợp cực đoan khi hệ thống tập tin sẽ không ngắt kết nối sạch (ví dụ như lỗi đĩa vật lý) hoặc hệ thống ở trạng thái chỉ buộc khởi động lại trực tiếp (8) sẽ khiến nó bị đóng băng (ví dụ như quá tải cao để cho nó lên lịch lệnh tắt máy).

Tôi cũng không bao giờ làm syncthủ tục trước khi ngắt kết nối thiết bị di động và không bao giờ gặp sự cố.

Một ví dụ khác - Xen cho phép DomU được gửi shutdownlệnh từ Dom0, đây được coi là "tắt máy sạch" mà không cần ai phải đăng nhập và gõ phép thuật sync; sync; synctrước.

Tôi đúng hay tôi may mắn vì vài ngàn lần tắt hệ thống?


Điều gì về việc giới thiệu một hệ thống tập tin chỉ đọc là đọc / ghi? Tôi đã gắn rootfs là readonly và tôi nhắc nó là read / write với lệnh này: mount -o remount, rw / và sau đó khi tôi đã thay đổi rootfs tôi chạy mount -o remount, ro / nhưng tôi thấy một số vấn đề khi kiểm tra fs với fsck. Lệnh thứ hai có gọi SYNC trước khi gắn là chỉ đọc không?

Câu trả lời:


18

Lý do mọi người sẽ chạy sync; synctrước một haltlà vì haltlệnh sẽ không tắt hệ thống sạch trên các linux cũ hơn. Cách chính xác để làm điều này trên các hệ thống SYSVr4 luôn là yêu cầu init chuyển sang một cấp độ chạy khác.

BSD và SunOS 4 không phải là hệ điều hành SYSVr4, đó là lý do tại sao chúng khác nhau. Solaris (SunOS 5) là SYSVr4 và Linux chọn ra các bit của tiêu chuẩn SYSVr4 mà nó muốn sử dụng.

Sử dụng tạm dừng thực sự là một cách thực hiện khá tệ trên hầu hết các UNIX (Linux là một trong những trường hợp ngoại lệ) vì nó không thực sự chạy qua các tập lệnh init để thực hiện những việc như dừng quá trình và ngắt kết nối đĩa - nó chỉ dừng bộ xử lý.

Nếu bạn có thể đảm bảo rằng bạn sẽ không bao giờ sử dụng bất kỳ loại hệ thống UNIX nào ngoài Linux thì bạn có thể tiếp tục sử dụng halt- nếu có cơ hội bạn sẽ sử dụng các UNIX khác thì tôi khuyên bạn nên tập thói quen sử dụng init _runlevel_hoặc shutdown.

Các shutdownlệnh thực sự kể về initquá trình thay đổi mức độ chạy của nó run level - khi làm như vậy init sau đó tiến hành để chạy mỗi K * init script và S * init script liên quan với mức độ chạy. Một trong các tập lệnh ở cấp độ 0 thực hiện việc ngắt kết nối các hệ thống tập tin.

Trên Linux, haltlệnh chỉ gọi shutdownlệnh trừ khi mức chạy đã là 0 (tắt) hoặc 6 (khởi động lại) bằng mọi cách ; Vì vậy, không mất mát ở đó.

Hành động ngắt kết nối một hệ thống tập tin bằng cách sử dụng umountsẽ đồng bộ hóa dữ liệu vào đĩa trước khi ngắt kết nối nó.

Nếu bạn đã chạy sync; sync; halttrên Linux, bạn sẽ ổn với trạng thái hệ thống tệp vì các nhà phát triển đã đảm bảo haltthực hiện đúng ; tuy nhiên sẽ đúng hơn khi sử dụng:shutdown now


Cảm ơn đã giải thích. Chỉ cần làm rõ những gì bạn đang nói - "các nhà phát triển đã đảm bảo rằng việc dừng làm đúng" có nghĩa là "tạm dừng" gọi "đồng bộ hóa" hoặc nó chạy các tập lệnh init thích hợp mà cuối cùng gọi là "đồng bộ hóa"? Điều gì về việc đã ở chế độ một người dùng và chỉ gọi "tạm dừng"? Tôi có đúng trong giả định của mình rằng nhân Linux chỉ đủ thông minh để không thực sự tắt đột ngột nhưng sẽ ngắt kết nối tất cả các hệ thống tệp trước khi tắt?
Amos Shapira

1
haltcác cuộc shutdowngọi umountmà thực hiện đồng bộ hóa.
DaveG

Cảm ơn DaveG. Vì vậy, những gì bạn đang nói là tất cả xảy ra ở cấp độ người dùng và hạt nhân sẽ không tự động và đồng bộ hóa các hệ thống tập tin? Trong mọi trường hợp, có vẻ như buổi lễ "đồng bộ hóa, tắt máy" là dư thừa ngày nay.
Amos Shapira

7

Việc sử dụng nhiều synccuộc gọi là để cho phép HĐH và đĩa có thời gian xóa hàng đợi ghi. "sync; sync; sync"không được coi là hữu ích; một đã làm "sync<cr> sync<cr> sync<cr"và sự chậm trễ trong khi ASR-33 của bạn đã trả lại vận chuyển / dòng mới cung cấp đủ độ trễ. Dừng luôn luôn đồng bộ hóa cuộc gọi; câu hỏi là liệu có đủ thời gian để xả hàng đợi trước khi mất điện hay không.

Các bưu chính ban đầu sync; sleep 30là phù hợp hơn với những gì đã được dự định.


7

Tôi chỉ có thể nói lý do tại sao bạn sẽ phát hành syncnhiều lần. Lệnh lập lịch trình tuôn ra đĩa nhưng trả về trước khi quá trình xả thực sự hoàn thành. Bất kỳ synclệnh tiếp theo nào cũng sẽ chặn cho đến khi có bất kỳ lần xả nổi bật nào đang diễn ra trước khi lên lịch cho một lần xả khác và thoát. Do đó, sync; syncđảm bảo tuôn ra đồng bộ. Bạn không cần phải làm quá 2 lần, cũng không được đưa sleepvào hỗn hợp.


5

Những người trong số các bạn nói với chúng tôi rằng "đồng bộ hóa, đồng bộ hóa, đồng bộ hóa" không có mục đích tiết lộ tuổi của bạn.

Quay trở lại thời kỳ tuyệt vời, trước khi Unix là thứ dành cho thanh thiếu niên, chúng tôi thường phải sử dụng TAPE cho nhu cầu phát trực tuyến / sao lưu của mình. Thông thường, chúng tôi sẽ gắn một hệ thống tệp dựa trên băng để truyền các bản sao lưu, v.v. Một dải băng nhựa từ dài mỏng này là tất cả những gì chúng tôi có, để lưu trữ các tập tin của chúng tôi trên ..

Lệnh 'sync, sync; sync' là cách mà các máy băng cũ này có thể được yêu cầu tự tua lại cho đến hết (trước khi tắt máy) - chúng có phần sụn trên bo mạch sẽ nhận được cmd đồng bộ hóa (giống như tất cả các hệ thống tệp tốt làm) và nếu nó được theo dõi gần như ngay lập tức bởi hai lệnh đệm đồng bộ hơn, chính ổ đĩa băng sẽ hiểu điều này có nghĩa là "tua lại băng và ngắt kết nối nó". Không có cách nào để bảo ổ đĩa băng tua lại, ngoài phương pháp này và nó bị kẹt .. Thói quen này được truyền lại khi các ổ đĩa cứng trở nên khả dụng hơn - chúng tôi không phải là người vận hành cũ. ) bộ nhớ cơ bắp của chúng tôi bạn biết! Tôi tin rằng nó đã đạt được trạng thái văn hóa dân gian ngay sau khi băng trở nên ít phổ biến hơn và ổ cứng trở nên khả dụng hơn, nhưng nó vẫn có công dụng đối với những người trong chúng ta có ổ đĩa băng.


3
Băng là thiết bị nhân vật. "Gắn kết" hoạt động trên các thiết bị khối. Tôi đã từng ở đó (chạy "kết xuất" trên Vax 11/750 với BSD 4.2 vào giữa những năm 80) và không có điều đó và chạy "đồng bộ hóa" trên thiết bị băng. Băng sẽ tự động cuộn lại nếu bạn mở nó dưới dạng một tên thiết bị và giữ nguyên vị trí nếu bạn mở nó bằng một tên khác và bạn có thể gửi các lệnh rõ ràng bằng cách sử dụng "mt" nếu bạn phải.
Amos Shapira
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.