Làm cho một đĩa cứng ngủ và chỉ thức dậy khi cần thiết


10

Tôi muốn kết nối một đĩa cứng khác với máy tính của mình, tôi muốn ngủ 99% thời gian. Tôi sẽ chỉ sử dụng nó cho một vài thứ, nhưng tôi cần nó được gắn kết mọi lúc.

Để đạt được điều này tôi muốn biết:

  1. Làm cách nào để đăng nhập quá trình truy cập thiết bị? Tôi cần đăng nhập để có thể biết điều gì đang khiến đĩa cứng thức dậy nếu có, vì vậy tôi có thể hành động theo nó.
  2. Có bất kỳ cài đặt kernel đặc biệt nào tôi cần thực hiện để thiết bị có thể ngủ lâu hơn không?
  3. Làm cách nào để đặt khoảng thời gian ngủ của đĩa cứng?

Câu trả lời:


13

Khoảng thời gian ngủ được gọi là "APM" (Quản lý năng lượng tự động) và spindown_time. Điều này được kiểm soát hdparmnhư thế này:

hdparm -B 50 -S 36 /dev/disk/by-label/BACKUP-HDD

Nó sẽ làm cho ổ cứng của bạn tăng tốc khi không hoạt động ~ 3 phút.


4

Khi bạn đang dùng linux, bạn có thể sử dụng fatracetiện ích mới , ghi nhật ký mọi quyền truy cập tệp và cho bạn biết quy trình nào chịu trách nhiệm:

https://launchpad.net/fatrace

Thêm thông tin ở đây:

http://www.piware.de/2012/02/fatrace-report-system- Worldwide-file-access-event /

Nó sử dụng API fanotify linux ( chi tiết hơn ) có sẵn kể từ kernel linux 2.6.37.

fatrace không được đóng gói bởi tất cả các bản phân phối kể từ tháng 7 năm 2014 (nó đã được đưa vào thử nghiệm debian gần đây, vì vậy nên gửi trong 'jessie'), nhưng rất dễ cài đặt từ nguồn.


1
Tôi không biết ý của bạn về phân phối "nhất". Như thường lệ Debian là bản phân phối cuối cùng để có được một cái gì đó. Tôi đã có sẵn nó trên Fedora trong một thời gian khá lâu ...
Michael Hampton

3

http://en.wikipedia.org/wiki/Fuser_%28Unix%29 - fuser là một lệnh UNIX được sử dụng để hiển thị các quá trình đang sử dụng một tệp, hệ thống tệp hoặc ổ cắm được chỉ định.

http://sourceforge.net/projects/hdparm/ - get / set tham số ổ ATA / SATA trong Linux (tìm tùy chọn -S)

http://sg.danny.cz/sg/sg3_utils.html - Gói sg3_utils chứa các tiện ích gửi lệnh SCSI đến thiết bị. Cũng như các thiết bị vận chuyển theo truyền thống được liên kết với SCSI (tìm sg_start)


Cảm ơn câu trả lời thông tin của bạn! Dường như fuser chỉ cho tôi biết các tiến trình đang sử dụng một tệp, ổ cắm hệ thống tệp tại trường hợp ban hành lệnh. Mặc dù điều này rất hữu ích nếu một quá trình thực hiện một cái gì đó nhanh chóng, như liệt kê nội dung của thư mục gốc của thiết bị, tôi có thể bỏ lỡ nó ngay cả khi tôi có bộ nhiệt áp chạy trong một vòng lặp. Nếu có một cái gì đó sẽ chờ và ghi nhật ký tất cả hoạt động cho đến khi tôi bảo nó dừng lại, nó sẽ hữu ích hơn nữa trong tình huống này. Bạn có biết cái nào không?
Đã xóa

Tôi đoán hdparam là những gì tôi sẽ sử dụng để thiết lập thời gian chờ đợi trước khi ngủ? Và sg3_utils chỉ là một công cụ mạnh mẽ nhưng tôi sẽ không sử dụng nó trong trường hợp này? (Theo tôi đoán tôi sẽ không phải chỉ định thủ công khi nào ổ cứng nên ngủ sau khi thiết lập bằng hdparam?)
Đã xóa

3

btracehoặc blktrace(một trình bao bọc của btrace) khối I / O theo dõi hạt nhân và có thể giúp bạn ở đó.


2

lsof +D /path/to/mount sẽ hiển thị cho bạn mọi quy trình có bất kỳ tệp đã mở nào trong đường dẫn được chỉ định.


0

Tôi có vấn đề tương tự. Tôi có SSD, /dev/sdbvới HĐH (Linux Mint 18.1 dựa trên Ubuntu Xenial) và HDD /dev/sda, với dữ liệu mà tôi sử dụng theo thời gian. Cả hai đĩa đều được mã hóa. Phân vùng của ổ cứng không được gắn kết. Và dù sao trong khoảng thời gian vài phút, HDD thức dậy, sau đó ngủ, rồi lại thức dậy. Lộn xộn.

Dưới đây là một câu hỏi trùng lặp với câu trả lời hữu ích , gợi ý auditdđể tìm ra quá trình hành xử xấu.

apt-get install auditd
auditctl -w /dev/sda -p rwa

Sau đó, tôi buộc HDD phải ngủ với hdparm -Y /dev/sda. Sau đó đợi cho đến khi tôi nghe thấy ổ cứng quay trở lại. Sau đó chạy ausearch -f /dev/sda. Trong trường hợp của tôi, nó hiển thị các mục như sau.

time->Sat Feb 25 12:38:17 2017
type=PROCTITLE msg=audit(1488022697.651:1744): proctitle=2F7573722F6C69622F756469736B73322F756469736B7364002D2D6E6F2D6465627567
type=PATH msg=audit(1488022697.651:1744): item=0 name="/dev/sda" inode=376 dev=00:06 mode=060660 ouid=0 ogid=6 rdev=08:00 nametype=NORMAL
type=CWD msg=audit(1488022697.651:1744):  cwd="/"
type=SYSCALL msg=audit(1488022697.651:1744): arch=c000003e syscall=2 success=yes exit=12 a0=f3fb90 a1=800 a2=7f4745221f64 a3=30 items=1 ppid=1 pid=18520 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pool" exe="/usr/lib/udisks2/udisksd" key=(null)

Phần có liên quan là exe = "/ usr / lib / udisks2 / udisksd" . Mặc dù tôi cũng có smartmontoolsngười smartdlà thủ phạm. Tôi gỡ cài đặt smartmontoolsvà dừng udisk2dịch vụ với service udisks2 stop. Sau đó ổ cứng ngủ như mong đợi.

Lưu ý rằng udisks2sẽ tự động bắt đầu khi tôi, ví dụ, mở ứng dụng Disks , vì vậy tôi phải dừng nó lại. Một nhược điểm khác là các tham số SMART không được theo dõi cho cả hai đĩa, điều này không tốt nhưng như một cách giải quyết phù hợp.

Ngoài ra, một điều không rõ ràng, đó là báo cáo lỗi này cho biết udisks2không thực hiện việc bỏ phiếu đĩa mà hiện được thực hiện bằng kernel. Nhưng bằng chứng dường như chỉ ra điều ngược lại.

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.