Giảm tốc độ khởi động chậm cho đến khi tất cả các thiết bị có sẵn


1

Tôi đang sử dụng OS X làm Máy chủ, đang chạy Máy chủ 4.0 để cung cấp dịch vụ lưu trữ email / v.v.

Kèm theo máy này tôi có một KHUYẾN MÃI Ổ đĩa RAID Pegasus R2 gắn tại /Volumes/RAID6-11TB, và tôi đã thay đổi vị trí lưu trữ dịch vụ mặc định để dữ liệu Server.app sẽ được đặt trên ổ RAID (để dự phòng và để Backblaze có thể sao lưu email quý giá của tôi, thường bỏ qua /Library ).

Vấn đề là khi khởi động lại máy, Server.app không khởi động đúng cách, bởi vì một cái gì đó trong quá trình khởi động là tạo một thư mục trống /Volumes/RAID6-11TB/Library/Server/Web/Data/Sites/Default/NetBoot. Khi mảng RAID sau đó được gắn tự động, điểm gắn kết mặc định của nó đã tồn tại, do đó, nó được gắn vào /Volumes/RAID6-11TV 1, mà gây ra không tốt chút nào.

Có cách nào để sửa lỗi khởi động lại không:

  1. Server.app sẽ không khởi chạy cho đến khi đĩa RAID sẵn sàng, hoặc
  2. Trì hoãn khởi động hệ điều hành để nó không hoàn thành khởi chạy cho đến khi đĩa RAID sẵn sàng?

Về (1), tôi đã chỉnh sửa /Library/LaunchDaemons/com.apple.serverd.plist để thêm một QueueDirectories chính, nhưng điều đó dường như không có tác dụng gì, và WatchPath Có vẻ như nó có ngữ nghĩa sai, vì vậy tôi thậm chí còn cố gắng để thử nó.

Về (2), nếu tôi khởi động vào chế độ Người dùng đơn (nhấn và giữ Command+S trong khi khởi động), sau đó chờ đợi cho đến khi tất cả các tin nhắn đã hoàn thành sau đó đánh Ctrl+D để tiếp tục khởi động, /Volumes/RAID6-11TB được gắn đúng như dự định.

Tuy nhiên, điều này không giúp ích cho việc khởi động lại tự động khi tôi đi vắng (ví dụ: sau khi mất điện). (OK, câu trả lời "phù hợp" là sao lưu pin để máy không khởi động lại, nhưng bây giờ hãy bỏ qua điều đó ...)

Có một số cách để làm cho công việc này?


Bạn có sử dụng nfs hoặc http cho netboot?
klanomath

@klanomath Tôi hoàn toàn không sử dụng netbook và AFAICT Tôi đã vô hiệu hóa netbook trong Server.app, vì vậy tôi không chắc tại sao nó lại cố gắng tạo thư mục đó ngay từ đầu ...
jonp

Câu trả lời:


1

Đó là Server.app đang tạo thư mục bí ẩn đó đang làm hỏng công việc của bạn.

Ngăn Server.app khởi chạy khi máy chủ khởi động và sau đó bạn có thể tạo công việc lương thấp cái đó ra mắt nó thông qua một tập lệnh .sh.

Kịch bản chỉ nên là một cái gì đó như

#!/bin/bash
/Applications/Server.app

và giống như người được nói trong một liên kết, mục crontab sẽ là một cái gì đó dọc theo dòng

@reboot sleep 60 && my_script.sh

Điều đó sẽ cho RAID của bạn đủ thời gian để gắn kết đúng cách trước khi Server.app bật lên và tạo thư mục đó.


1

Tôi phân chia sự khác biệt với @zomgdavidbowie: Tôi đã tạo một kịch bản mới /usr/local/bin/start-server-app:

#!/bin/sh

sleep 120

exec /Library/PrivilegedHelperTools/com.apple.serverd

Sau đó tôi chỉnh sửa /Library/LaunchDaemons/com.apple.serverd.plist và thay thế tất cả các trường hợp của /Library/PrivilegedHelperTools/com.apple.serverd với /usr/local/bin/start-server-app:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.apple.serverd</string>
    <key>MachServices</key>
    <dict>
        <key>com.apple.serverd</key>
        <true/>
    </dict>
    <key>OnDemand</key>
    <false/>
    <key>Program</key>
    <string>/Library/PrivilegedHelperTools/com.apple.serverd</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Library/PrivilegedHelperTools/com.apple.serverd</string>
    </array>
</dict>
</plist>

Điều này cho phép tôi ở lại với cơ chế khởi chạy mặc định mà không đi sâu vào cron (8), trong khi vẫn trì hoãn com.apple.serverd gọi cho đến khi ổ đĩa ngoài đã được gắn.


0

Làm thế nào về điều này, thay vì chỉ chờ đợi, hãy làm như sau:

#!/bin/sh

if [[ ! -e /Volumes/<volname ]]; then
sleep 60
else
exec /Library/PrivilegedHelperTools/com.apple.serverd
fi
exit 0

Điều này sẽ kiểm tra xem bạn có tồn tại âm lượng không, nếu không, hãy đợi 60 giây, nếu có, hãy khởi động ứng dụng máy chủ.


Ý tưởng tốt, mặc dù theo kinh nghiệm của tôi, khối lượng là không bao giờ ngay lập tức có sẵn khi khởi động, vì vậy sleep dù sao cũng sẽ bị đánh ...
jonp

@jonp bạn có biết nếu /Library/LaunchDaemons/com.apple.serverd.plist được viết qua khi Sever.app được cập nhật?
Kemo

Có, nó được ghi đè khi Server.app đã cập nhật. Giữ một bản sao lưu để bạn có thể dễ dàng thay thế nó khi Server.app được cập nhật.
jonp
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.