Điều tra đĩa ghi thêm để tìm hiểu quá trình ghi vào SSD của tôi


11

Tôi cố gắng giảm thiểu ghi đĩa vào ổ đĩa hệ thống SSD mới của mình. Tôi bị mắc kẹt với đầu ra i bổ sung:

~ > iostat -d 10 /dev/sdb
Linux 2.6.32-44-generic (Pluto)     13.11.2012  _i686_  (2 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               8,60       212,67       119,45   21010156   11800488

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               3,00         0,00        40,00          0        400

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               1,70         0,00        18,40          0        184

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               1,20         0,00        28,80          0        288

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               2,20         0,00        32,80          0        328

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               1,20         0,00        23,20          0        232

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdb               3,40        19,20        42,40        192        424

Như tôi thấy có ghi vào sdb. Làm thế nào tôi có thể giải quyết quá trình viết?

Tôi biết về iotop , nhưng nó không hiển thị hệ thống tập tin nào đang được truy cập.

Câu trả lời:


7

Sau đây sử dụng cơ chế kết xuất khối bộ nhớ ảo của kernel. Trước tiên hãy lấy tập lệnh perl:

wget https://raw.githubusercontent.com/true/aspersa-mirror/master/iodump

Sau đó bật kết xuất khối:

echo 1 | sudo tee /proc/sys/vm/block_dump

Và chạy như sau:

while true; do sleep 1; sudo dmesg -c; done  | perl iodump

.. và nhấn Controlcđể hoàn tất, bạn sẽ thấy một cái gì đó như sau:

^C# Caught SIGINT.
TASK                   PID      TOTAL       READ      WRITE      DIRTY DEVICES
jbd2/sda3-8            620         40          0         40          0 sda3
jbd2/sda1-8            323         21          0         21          0 sda1
#1                    4746         11          0         11          0 sda3
flush-8:0             2759          7          0          7          0 sda1, sda3
command-not-fou       9703          4          4          0          0 sda1
mpegaudioparse8       8167          2          2          0          0 sda3
bash                  9704          1          1          0          0 sda1
bash                  9489          1          0          1          0 sda3
mount.ecryptfs_       9698          1          1          0          0 sda1

Và tắt kết xuất khối khi bạn kết thúc:

echo 0 | sudo tee /proc/sys/vm/block_dump

Cảm ơn http://www.xaprb.com/blog/2009/08/23/how-to-find-per- Process-io-statistic-on-linux / cho thông tin hữu ích này.


10

Bạn ít nhất có thể bắt đầu với iotop. Nó sẽ không cho bạn biết hệ thống tập tin nào đang được viết nhưng nó sẽ cung cấp cho bạn một số quy trình để điều tra.

sudo apt-get install iotop
sudo iotop

Nó hiển thị đĩa đọc và ghi tức thời và tên của lệnh đọc hoặc ghi.

Nếu bạn đang cố gắng bắt một quá trình viết không thường xuyên, bạn có thể sử dụng --accumulatetùy chọn hoặc ghi nhật ký đầu ra vào một tệp:

sudo -i
iotop --batch > iotop_log_file

Rõ ràng việc ghi tệp nhật ký sẽ hiển thị trong kết quả, nhưng bạn cũng có thể grep cho các quá trình khác ghi vào đĩa.

Tại thời điểm này, bạn sẽ có thể tìm thấy một số quy trình nghi ngờ ứng cử viên. Cột bên trái trong iotop hiển thị pid. Tiếp theo, tìm hiểu mô tả tập tin mà quá trình đang viết:

sudo -i
strace -p <pid> 2>&1 | grep write

Bạn sẽ thấy đầu ra như thế này khi quá trình viết:

write(1, "\n", 1)                       = 1
write(4, "test\n", 5)                   = 5
write(1, ">>> ", 4)                     = 4

Đối số đầu tiên để viết là mô tả tập tin. Chúng tôi có lẽ đang tìm kiếm các giá trị lớn hơn 2, bởi vì 0, 1 và 2 chỉ là stdin, stdout và stderr. Mô tả tập tin 4 trông thú vị.

Bây giờ bạn có thể tìm ra tập tin mà bộ mô tả tập tin trỏ tới:

lsof -p <pid>

Mà sẽ mang lại sản lượng như:

...
python  23908  rob  mem    REG    8,1    26258 8392656 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
python  23908  rob    0u   CHR  136,5      0t0       8 /dev/pts/5
python  23908  rob    1u   CHR  136,5      0t0       8 /dev/pts/5
python  23908  rob    2u   CHR  136,5      0t0       8 /dev/pts/5
python  23908  rob    3w   REG   0,25      909 9049082 /home/rob/testfile
python  23908  rob    4w   REG   0,25       20 9049087 /home/rob/another_test_file

Nhìn vào cột thứ 4. 4wcó nghĩa là mô tả tệp 4 được mở để ghi và tệp là another_test_file.

Có thể cho một quá trình để mở, viết và sau đó đóng một tệp, trong trường hợp đó lsof sẽ không hiển thị nó. Bạn có thể bắt gặp điều này xảy ra với:

strace -p <pid> 2>&1 | grep open

Tôi không biết về --accumulte Đó là tính năng thực sự thú vị! Cảm ơn bạn rất nhiều vì điều đó!!! iotop - chuyển hướng đầu ra không thành công với UnicodeEncodeError: 'ascii' codec không thể mã hóa các ký tự ở vị trí 92-99: thứ tự không nằm trong phạm vi (128) trong Tệp "/usr/lib/pymodules/python2.6/iotop/ui. py", dòng 405, trong refresh_display
zuba

Tôi rất vui vì câu trả lời của tôi ít nhất là sử dụng. Việc chuyển hướng làm việc cho tôi; không chắc chắn tôi có thể giải thích điều đó.
Rob Fisher

Ok, tôi đã chơi xung quanh một chút và thấy rằng tôi có thể sử dụng lsof và strace để ít nhất làm đủ công việc thám tử để bắt các quá trình ghi vào ổ SSD. Hy vọng rằng điều này cuối cùng trả lời câu hỏi khi được hỏi, mặc dù có vẻ như câu trả lời của Colin Ian King dễ dàng hơn!
Rob Fisher

1
Xin lỗi vì phản hồi muộn, tôi không có gì để nói cho đến khi tôi chơi với strace. Cảm ơn bạn vì cách tiếp cận thông minh khác, tôi đã bỏ phiếu. Tôi thấy khá khó khăn để viết kịch bản để thực hiện nó, do có ít kinh nghiệm trong việc viết kịch bản shell. Đó là lý do tại sao tôi chọn giải pháp khác. Cảm ơn vi đa chia sẻ kiên thưc của bạn!
zuba

Nên --accumulated, nhưng trao đổi ngăn xếp yêu cầu 6 ký tự để chấp nhận chỉnh sửa bài viết.
h__
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.