Làm cách nào để tắt nguồn khi không có systemd / init (ví dụ: sử dụng init = / bin / bash)?


9

poweroffphàn nàn rằng nó không thể kết nối với systemd thông qua DBus (tất nhiên, nó không còn tồn tại). Tôi đã làm synctheo kill $$, nghĩ rằng pid 1 death sẽ khiến kernel bị mất điện, nhưng điều đó gây ra sự hoảng loạn cho kernel. Sau đó tôi giữ nút nguồn để buộc tắt nguồn.

Cách thích hợp nhất để tắt nguồn trong kịch bản này là gì?


Có một tiền đề ngầm không rõ ràng về câu hỏi rằng bộ công cụ systemd được cài đặt. Khi "không có systemd" thực sự có nghĩa là không có bộ công cụ systemd nào được cài đặt, đó là cách tiêu đề cũng có thể được đọc, câu trả lời khá khác nhau; và đó có lẽ là giá trị một câu hỏi riêng theo cách riêng của mình.
JdeBP

@JdeBP Bạn nói đúng rằng, chỉ đọc tiêu đề và bỏ qua init=/bin/bashgợi ý / ngụ ý, sẽ mơ hồ nếu systemd được cài đặt hay không. Tôi đã có nghĩa là không có hệ thống chạy . Trong mọi trường hợp, không chạy systemd, tôi nghĩ bộ công cụ systemd sẽ vô dụng và câu trả lời sẽ sử dụng các phương tiện khác như của sysrq.
JoL

Câu trả lời:


10

Ngắt kết nối các hệ thống tập tin mà bạn đã gắn kết. Hệ thống tập tin gốc là một trường hợp đặc biệt; cho điều này bạn có thể sử dụng mount / -o remount,ro. Trên Linux, umount /cũng xảy ra để làm việc, bởi vì nó được chuyển đổi hiệu quả thành lệnh cũ.


Điều đó nói rằng, bạn không cần phải lo lắng về việc vượt quá nhiều, trừ khi

  1. Bạn đã gắn một hệ thống tệp cũ như FAT - như được sử dụng bởi phân vùng hệ thống EFI - hoặc ext2, không thực hiện nhật ký hoặc tương đương. Với một hệ thống tập tin hiện đại, syncđược cho là đủ và hệ thống tập tin sẽ tự sửa chữa rất nhanh trong lần khởi động tiếp theo.
  2. Bạn có thể đã để lại một quá trình đang chạy ghi vào hệ thống tập tin và bạn đã có ý định tắt nó một cách sạch sẽ. Trong trường hợp đó, thật hữu ích khi cố gắng vượt qua các hệ thống tập tin, bởi vì umount sẽ thất bại và hiển thị một lỗi bận để nhắc bạn về người viết còn lại.

Trên đây là phần quan trọng. Sau đó, bạn cũng có thể tắt nguồn phần cứng một cách thuận tiện poweroff -f. Hoặc khởi động lại với reboot -f.

Có một systemdtương đương cụ thể của poweroff -f: systemctl poweroff -f -f. Tuy nhiên poweroff -fcũng làm điều tương tự và systemdhỗ trợ lệnh này ngay cả khi nó đã được xây dựng mà không có khả năng tương thích SysV.


Về mặt kỹ thuật, tôi nhớ rằng ổ cứng USB của tôi đã được ghi nhận là yêu cầu Windows "gỡ bỏ an toàn" hoặc tương đương. Nhưng yêu cầu này không an toàn, và Linux không thực hiện điều này trong khi tắt máy bình thường. Nó được giải thích tốt hơn có nghĩa là bạn không nên chạy ổ cứng trong khi nó đang quay - bao gồm cả bằng cách rút phích cắm. Tắt nguồn hoàn toàn nên dừng ổ đĩa quay. Bạn có thể nghe, cảm nhận hoặc xem nếu nó không dừng lại :-).


Chỉ để bạn biết, tôi không quên chấp nhận. Chỉ là tôi đã thấy lời khuyên nên đợi một thời gian trước khi chấp nhận câu trả lời để cho người khác (có thể trong các múi giờ khác nhau) xem câu hỏi và có cơ hội đưa ra câu trả lời của riêng họ.
JoL

sync()đủ cho ext2. Nó sẽ phàn nàn về việc bẩn nhưng thực sự sẽ không bị hỏng ngoại trừ thông tin tóm tắt. Tôi thường coi init = / bin / bash hoặc bất kỳ địa phương nào tương đương là tình huống khẩn cấp.
Joshua

@Joshua ext2 fsck thật tuyệt vời . Nhưng hiệu suất fsck trên các hệ thống tập tin lớn còn tệ hơn nhiều so với phát lại tạp chí. Trong tình huống khẩn cấp, bạn không muốn bị trì hoãn vì một sự bất minh ô uế.
sourcejedi

Bạn biết về fsck.mode=skipphải không?
Joshua

3
@Joshua có liên quan tại sao? Nếu bạn thực hiện một unmean unmount, cuối cùng bạn sẽ cần phải sửa chữa FS. Đừng sử dụng fsck.mode=skipđể khởi động bình thường sau khi unmean unmount!
sourcejedi

5

Tôi chỉ đơn giản sẽ thực hiện dưới hai lệnh:

echo s > /proc/sysrq-trigger    <= For sync
echo o > /proc/sysrq-trigger    <= For shutdown the system

Giả sử khóa ma thuật được kích hoạt trong kernel


4

Ok, vậy là tôi đã có tùy chọn exec init. Từ đó, tôi có thể sẽ có thể sau này poweroff. Tôi tự hỏi nếu có những lựa chọn thay thế tốt hơn, mặc dù.


@ G-Man sẽ không bắt đầu quá trình khởi động bình thường và cuối cùng cung cấp cho bạn vỏ bình thường của bạn chứ?
muru

2
@muru Bạn có thể làm exec init 0. Điều đó sẽ không hoạt động với tất cả các hệ thống init, nhưng các hệ thống tương tự sẽ trải qua một chuỗi tắt máy.
Austin Hemmelgarn

1
Tôi nghĩ rằng đây là một câu trả lời thực sự tốt cho các lý do khác; đặc biệt bởi vì hầu hết các trường hợp tắt nguồn không mong muốn nhiều như khởi động lại và điều này tránh khởi động lại một khi đã khắc phục thiệt hại.
Joshua

1
@Joshua Điều đó thật tiện lợi, nhưng nếu bạn muốn an toàn nhất, thường nên kiểm tra toàn bộ quá trình khởi động hoạt động :-).
sourcejedi

3

Có hiệu quả, tou muốn gọi khởi động lại (2) tòa nhà.

Hai cách bạn có thể làm điều này:

  1. Chạy reboot -fhoặc poweroff -f, điều này sẽ gọi reboot(2)trực tiếp.

  2. Nếu bạn đang ở trên thiết bị đầu cuối ảo Linux thực (không phải trình giả lập thiết bị đầu cuối GUI), bằng cách nhấn Ctrl+ Alt+ Delete.

Lưu ý rằng phím tắt có thể bị tắt bởi một số chương trình không gian người dùng (thường là init), khi tắt, phím tắt sẽ gửi tín hiệu đến init thay thế.

Tất cả các lệnh trên phải được thực hiện sau khi vượt qua tất cả các đĩa hoặc phát lại dưới dạng chỉ đọc và chạy đồng bộ hóa, nếu không bạn có thể mất dữ liệu không được ghi. Nếu hệ vỏ của bạn là quá trình duy nhất đang chạy, đồng bộ hóa có thể là đủ.


1

Bạn có thể sử dụng các phím Magic SysRq ( https://en.wikipedia.org/wiki/Magic_SysRq_key ) để tắt máy tính của bạn.

Để tắt đúng cách, bạn có thể sử dụng thông tin sau (mẫu trích dẫn Wikipedia):

Một cách sử dụng phổ biến của khóa SysRq ma thuật là thực hiện khởi động lại an toàn máy tính Linux đã bị khóa (abbr. REISUB ). Điều này có thể ngăn chặn fsckyêu cầu khởi động lại và cho một số chương trình cơ hội lưu các bản sao lưu khẩn cấp của công việc chưa được lưu. [5]   Các phím QWERTY (hay AZERTY) mnemonics: " R aising E lephants tôi s S o U tterly B oring", " R eboot E ven Tôi f S ystem U tterly Broken "hoặc đơn giản là từ" Busier "đọc ngược, thường được sử dụng để ghi nhớ chuỗi khóa SysRq sau đây:

  • un Raw (kiểm soát bàn phím trở lại từ X),
  • t Erminate (gửi SIGTERM cho tất cả các quy trình, cho phép chúng chấm dứt một cách duyên dáng),
  • k Ill (gửi SIGKILL cho tất cả các quy trình, buộc chúng phải chấm dứt ngay lập tức),
  • Sync (xóa dữ liệu vào đĩa),
  • Unmount (kể lại tất cả các hệ thống tập tin chỉ đọc),
  • lại B.

Nhưng thay thế B cuối cùng bằng O (cho azerty / qwerty) cho "power O ff"


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.