Làm cách nào để kiểm soát thời gian quay của ổ cứng?


71

Tôi có 2 ổ cứng trong PC. Ubuntu sẽ tắt ổ cứng thứ cấp rất nhanh sau khoảng 15 phút, đây là thời gian ngắn đối với tôi. Tôi cần kiểm soát thời gian này. Tôi làm nó như thế nào?

Tôi đã thử quản lý năng lượng Gnome nhưng không thấy hữu ích.

Câu trả lời:


67

Có một cái nhìn tại hdparm.

Từ hướng dẫn ( man hdparmtrên dòng lệnh):

-S Đặt thời gian chờ (spindown) cho ổ đĩa. Giá trị này được sử dụng bởi ổ đĩa để xác định thời gian chờ đợi (không có hoạt động của đĩa) trước khi tắt động cơ trục chính để tiết kiệm điện. Trong những trường hợp như vậy, ổ đĩa có thể mất tới 30 giây để phản hồi lại lần truy cập đĩa tiếp theo, mặc dù hầu hết các ổ đĩa đều nhanh hơn nhiều.

Mã hóa của giá trị thời gian chờ là hơi đặc biệt. Giá trị bằng 0 nghĩa là "hết thời gian chờ": thiết bị sẽ không tự động chuyển sang chế độ chờ. Giá trị từ 1 đến 240 chỉ định bội số của 5 giây, mang lại thời gian chờ từ 5 giây đến 20 phút. Giá trị từ 241 đến 251 chỉ định từ 1 đến 11 đơn vị trong 30 phút, cho thời gian chờ từ 30 phút đến 5,5 giờ. Giá trị là 252 biểu thị thời gian chờ là 21 phút. Giá trị là 253 đặt khoảng thời gian chờ do nhà cung cấp xác định trong khoảng từ 8 đến 12 giờ và giá trị 254 được bảo lưu. 255 được hiểu là 21 phút cộng với 15 giây. Lưu ý rằng một số ổ đĩa cũ có thể có những cách hiểu rất khác nhau về các giá trị này.

Vì vậy, sudo hdparm -I /dev/sdb | grep levelsẽ hiển thị giá trị spindown hiện tại, ví dụ:

Advanced power management level: 254

Từ hướng dẫn: 254 được bảo lưu nên tôi hy vọng nó là mặc định của Ubuntu (mọi người có thể xác nhận / mở rộng về điều này không?)

Thí dụ:

sudo hdparm -S 25 /dev/sdb = spindown sau 25 * 5 giây.

sudo hdparm -S 245 /dev/sdb = spindown sau (245-240) * 30 phút.


cảm ơn Rinzwind vì những lời khuyên, đã giúp tôi rất nhiều nhưng tôi ước tôi thấy gui cho điều này trong phiên bản tiếp theo của Ubuntu hoặc nó có thể được tích hợp trong trình quản lý năng lượng gnome
user16295

4
Về câu trả lời của lzap, bạn dường như grepdành cho APM ( -Bparm) nhưng nói về -Sspindown. Bạn có biết gì về APM không?
turbo

3
-BCài đặt hiện tại được hiển thị như được chỉ ra ở trên. Làm cách nào để xem -Scài đặt hiện tại ?
SabreWolfy

5
sudo hdparm -y /dev/sdbgiết chết con thú ngay lập tức
siamii

1
@SabreWolfy Tôi đã hỏi rằng như một câu hỏi riêng biệt: Làm thế nào tôi có thể tìm ra thời gian quay xuống ổ đĩa hiện tại?
ændrük

46

Tiện ích ổ đĩa -> chọn ổ đĩa cứng -> nhấp vào biểu tượng "Thêm hành động ..." ở góc trên bên phải -> Cài đặt ổ đĩa ...

Của tôi trông như thế này: ảnh chụp màn hình


6
Dễ nhất cho đến nay, cảm ơn! (BTW gói bạn cần cài đặt nếu bạn không có gói này gnome-disk-utility.
Gerhard Burger

cách để đi linux! +1
neu-rah

Vâng, cực kỳ dễ dàng - rất vui vì điều này ở đây.
Zzzach ...

@Ray Bạn, thưa ngài, thật tuyệt vời! Về cơ bản tôi không có hy vọng rằng nó sẽ hoạt động cho một ổ cứng ngoài nhưng nó đã làm được!
UTF-8

1
Tại sao hầu hết các mẹo liên quan đến chỉnh sửa tệp dễ bị lỗi hoặc thao tác bảng điều khiển, trong khi các công cụ thân thiện với người dùng như thế này đã thoát!
WooYek

29

Nếu bạn quan tâm đến việc cài đặt hdparm liên tục giữa các lần khởi động lại, thay vì thêm nó vào crontab, bạn có thể sử dụng /etc/hdparm.conf. Tôi có những điều sau đây, lưu ý việc sử dụng vốn S, không phải chữ thường:

command_line {
    hdparm -S 25 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215 
}

Thêm dòng đó thay thế UUID của bạn hoặc bạn cũng có thể chỉ định thiết bị sử dụng /dev/sdXđịnh dạng. Bạn có thể tìm ra UUID của đĩa bằng lệnh sudo blkid.


3
Có đúng để sử dụng command_linengày nay? Tôi có ví dụ khác nhau trong tôi /etc/hdparm?
dims

1
Câu trả lời của Ondra Žižka dường như được cập nhật hơn.
Raphael

9
  1. Tìm UUID đĩa của bạn .

    sudo lsblk --output NAME,FSTYPE,LABEL,UUID,MODE
    
  2. Biên tập /etc/hdparm.conf

    sudo -H gedit /etc/hdparm.conf  # Be careful from now on
    
  3. Tìm kiếm spindown-timehoặc phần cài đặt đĩa của bạn.

    /dev/disk/by-label/4TB {
        spindown_time = 1200
    }
    
  4. Tôi thích tham khảo đĩa bằng UUID vẫn giữ nguyên trên các cài đặt khác nhau (trừ khi bạn thay đổi nó trong chính CTNH).

    /dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 {
        spindown_time = 1200
    }
    
  5. Nếu tập lệnh init gây ra sự cố khởi động, bạn có thể truyền nohdparm dòng lệnh kernel và tập lệnh sẽ không được chạy.


Các đơn vị cho tham số đó là gì?
gièm pha

IIRC, đó là giây. Hoặc có thể đây là tham số có các quy tắc hoang dã như "nếu nó dưới 10, thì hàng chục giây, nếu dưới 100, thì đó là phút", v.v. Tôi cần tìm.
Ondra ižka

2
Đây không phải là đơn vị, hãy kiểm tra cái này: wiki.archlinux.org/index.php/Hdparm
Ondra

Chúc mừng, vì một số lý do tôi không thể tìm thấy nó trong man hdparm.conf.
gièm pha

man hdparm.confgián tiếp đọc rằng giá trị được chuyển đến -Sdo đó các giá trị <255 phải tương thích với quy tắc trong câu trả lời hàng đầu . Bất kỳ thông tin thêm được hoan nghênh.
dma_k

8

Sau khi dành hàng giờ liền tôi phát hiện ra rằng ổ WDC của tôi không hỗ trợ lệnh hdparm -S, bất kể giá trị thuộc tính idle3 (google: idle3ctl). Và đó là vấn đề phổ biến với các ổ WD. Nhưng tôi vui mừng thông báo rằng hd-idle ( http://hd-idle.sourceforge.net/ ) hoạt động hoàn hảo. Nếu được cài đặt từ gói được xây dựng dpkg (xem Ghi chú cài đặt), nó sẽ tạo daemon trên cả ubfox và debian (config nằm trong / etc / default / hd-idle). Hoạt động tốt sau khi nối lại từ ngủ đông là tốt.

mc mặc định # ps phụ | grep hd-nhàn rỗi | grep -v grep | cắt -c 66-; cho f trong [quảng cáo]; làm hdparm -C / dev / sd $ f | grep -v "^ $"; làm xong
/ usr / sbin / hd-idle -i 1800 -a sdc -i 600 -a sdd -i 60 -l /var/log/hd-idle.log
/ dev / sda:
 trạng thái ổ đĩa là: active / idle
/ dev / sdb:
 trạng thái ổ đĩa là: chờ
/ dev / sdc:
 trạng thái ổ đĩa là: chờ
/ dev / sdd:
 trạng thái ổ đĩa là: chờ



5

Tôi phát hiện ra rằng hành vi spindown của Samsung HD204UI phụ thuộc vào cấp độ APM ( hdparm -B). Nếu mức APM là 127, thời gian chờ của spindown là 10 s. Nếu mức APM là 150, thời gian chờ spindown được xác định bởi -Stùy chọn.


hdparm có thể thiết lập nhưng không có -Stùy chọn (xem Cách xác định thời gian quay đĩa ). Để có được nó, hãy sử dụng phần mềm GUI "Disk". Xem câu trả lời khác với ảnh chụp màn hình.
KrisWebDev

5

Tôi thêm một cái gì đó như:

@reboot sudo hdparm -S244 /dev/disk/by-uuid/71492809-e463-41fa-99e2-c09e9ca90c8e  > /dev/null 2> /dev/null

để crontab gốc. Sử dụng uuid tốt hơn tôi nghĩ bởi vì sda/ sdbvv dường như thay đổi với mỗi lần khởi động lại


10
Tại sao không sử dụng hdparm.conf?
ændrük

3

Trong Ubuntu 14.04

Đĩa> tô sáng ổ đĩa> nhấp vào thiết bị ở góc trên bên phải> Cài đặt ổ đĩa> bây giờ bạn có cài đặt Chế độ chờ, APM, AAM và Ghi bộ đệm trong GUI dễ sử dụng!


Làm thế nào để bạn thực hiện công việc này? Tôi đã thiết lập điều này, và sau khi khởi động lại nếu tôi quay lại, nó đã nhớ rằng ổ đĩa sẽ tắt nguồn, nhưng nó không bao giờ làm được. hdparm -C luôn hiển thị nó đang hoạt động và chỉ chạy hdparm -S xxx từ dòng lệnh làm cho nó hoạt động.
dan carter

1
Nơi nào bạn tìm thấy "Đĩa"?
nealmcb

1

Trên Debian, với các ổ WD, tôi thấy rằng việc đặt bất kỳ mức nào với hdparm -S sẽ dẫn đến ổ đĩa trả về mức 254 cho hdparm -I tiếp theo . Vì vậy, tôi thực sự không chắc chắn nếu họ quay cuồng hay không. Tôi nghĩ rằng họ vẫn đang quay xuống.

Các ổ đĩa này nằm trên một mảng máy chủ và tôi thực sự không muốn chúng bị hỏng. Trước đây, tôi đã loại bỏ điều này bằng cách đặt một công việc định kỳ để cập nhật tệp cứ sau vài phút.


1

Tôi không gặp may với hdparm trên ổ cứng gắn ngoài gắn trong ổ USB, thứ mà tôi sử dụng để phục vụ phương tiện truyền thông với minidlna.

Tôi đã bắt gặp một ý tưởng từ đây: https://serverfault.com/questions/562738/keep-usb-backup-drive-from-s ngủing-while-mounted

Kết quả tốt nhất đến từ việc sử dụng uuid của đĩa, bạn có thể tìm thấy với:

sudo blkid

Phương pháp sau đây không yêu cầu quyền truy cập root, nhưng hdparm cũng vậy. Điều này sử dụng crontab để đọc một khối ngẫu nhiên từ ổ đĩa cứ sau 5 phút và bỏ qua tất cả các tin nhắn. Để đảm bảo bạn có UUID đúng, hãy kiểm tra nó trên dòng lệnh như thế này (đảm bảo bạn sử dụng UUID mong muốn của mình, không phải cái này):

sudo dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM

Bạn sẽ thấy đầu ra như thế này:

1+0 records in
1+0 records out
512 bytes copied, 0.000738308 s, 693 kB/s`

Để chặn thông báo này, cuối cùng có thể được viết ở đâu đó, có khả năng là / hệ thống tập tin (có trong ổ SSD trong trường hợp của tôi), dưới đây là những gì tôi đang sử dụng trong crontab gốc. Bạn đến đó với

sudo crontab -e

Sau đó, dưới các ý kiến:

*/5 * * * * bash -c 'dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM' >/dev/null 2>&1

Hy vọng điều này sẽ giúp người khác với các vấn đề tương tự. Thật không may, điều này vẫn được ghi vào syslog, nhưng có nhiều cách để ngăn chặn điều đó; xem bài đăng trên ServerFault này .

[sửa] 2017-01-07 09:02:

Tôi đã có thể chặn các tin nhắn này bằng cách chỉnh sửa /etc/rsyslog.d/50-default.conf để thay đổi dòng này:

*.*;auth,authpriv.none -/var/log/syslog

đến đây:

*.*;cron,auth,authpriv.none -/var/log/syslog

Thật không may, điều này ngăn chặn tất cả các tin nhắn cron; Tôi không thể nhận được cron để chuyển hướng đăng xuất khỏi hệ thống tập tin gốc (trong ổ SSD cũ, vì vậy tôi muốn hạn chế ghi), nhưng vì đây chỉ là một máy chủ gia đình, tôi có lẽ không bỏ lỡ nhiều. Chắc chắn sẽ không đề xuất chiến lược này cho một máy sản xuất.

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.