Trong linux, làm thế nào để bạn kiểm tra nếu một đĩa bị phân mảnh?


28

Khi khởi động, đôi khi fsck báo cáo sự phân chia cho một đĩa: "5,3% không liền kề".

Làm thế nào tôi có thể tự nhận được thông tin này? Có một lời mời fsck cụ thể?

Câu trả lời:


27

Bạn có thể chạy fsck.ext2 một cách an toàn trên hệ thống tệp ext2 ext3 hoặc ext4 ngay cả khi nó được gắn kết như thế này

sudo fsck.ext2 -fn /dev/sdXY

Nếu ổ đĩa được gắn kết, nó sẽ xuất ra rất nhiều lỗi, nhưng đối số -n bảo nó không chạm vào ổ đĩa.

$ sudo fsck.ext2 -fn /dev/sda1
e2fsck 1.42 (29-Nov-2011)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Ubuntu_Rescue: 291595/1222992 files (0.2% non-contiguous), 1927790/4882432 blocks

Cảm ơn! fsck.ext2 tìm thấy một số lỗi trên phân vùng nhà của tôi. Bây giờ tôi muốn sửa chữa nó. Điều này đặt ra câu hỏi: làm thế nào để tôi sửa chữa phân vùng nhà của mình, cái mà tôi cần tiếp tục gắn kết để đăng nhập?
Michael

3
@Michael Nếu ổ đĩa của bạn được gắn kết, chạy kiểm tra trên đó sẽ luôn báo cáo lỗi. Dù sao, nếu bạn muốn kiểm tra hệ thống tập tin trong lần khởi động lại tiếp theo, hãy chạy nó sudo tune2fs -C 16000 /dev/sda1và khởi động lại.
Rucent88

1
fsck kiểm tra những gì trên đĩa / bộ lưu trữ, nhưng nếu được gắn kết thì sẽ có những thứ đang diễn ra (một nửa được viết). Đó là lý do tại sao bạn sẽ thấy lỗi, chúng không phải là lỗi thực sự, chúng là lỗi sai. Mặc kệ họ.
ctrl-alt-delor

8

Nhóm hệ thống tập tin mở rộng hiện đại có sự cân bằng và liên tục được xem xét khi phân bổ tệp. Trong việc cân bằng ext3 và ext4 thường được quan tâm bằng cách áp dụng các mục nhật ký theo thứ tự và cụ thể là ext4 bằng cách phân bổ trước các mức độ của hệ thống tệp để tăng các khối liền kề. Theo đuổi mức phân mảnh thấp hơn 20% có thể không đáng để bạn dành thời gian, đặc biệt nếu hệ thống của bạn truy cập một vài tệp liên tục. Tôi khuyên bạn nên theo đuổi các chiến thuật này để tăng tốc độ đọc cho một hệ thống đĩa đơn:

  • tăng ram: điều này làm tăng bộ đệm hệ thống tập tin

  • tăng kích thước khối: bằng cách di chuyển từ 1k sang kích thước khối 4k, bạn sẽ có hiệu suất tốt hơn khi đọc các tệp gần hoặc lớn hơn kích thước khối của bạn

  • nếu bạn là người phạm tội, bạn có thể sắp xếp các tệp lớn và tệp nhỏ thành các phân vùng theo kích thước khối của chúng, bạn có thể chỉ muốn làm điều này nếu bạn lưu trữ ảnh, video và mã nguồn trong các thư mục riêng biệt

  • tăng cài đặt đọc trước của bạn bằng cách sử dụng tiện ích hdparm và / hoặc chế độ máy tính xách tay

  • sao lưu và khôi phục hệ thống tập tin của bạn theo kiểu tuyến tính, chẳng hạn như với tar

Nếu bạn có nhiều đĩa và đang sử dụng phân chia đột kích và / hoặc LVM, bạn cần xem xét các yếu tố khác, chẳng hạn như kích thước sọc.


4

Có, có một fscklời mời cụ thể (dưới dạng root hoặc sudo):

$ fsck /dev/sdXY

Thay thế X và Y bằng các tham số chính xác cho trường hợp của bạn (ví dụ /dev/sda1).

KHÔNG CHẠY NÀY TRÊN MỘT PHẦN THAM GIA! Nó có thể làm hỏng nghiêm trọng hệ thống tập tin của bạn.

Để biết thêm thông tin về Linux và chống phân mảnh, xem câu trả lời của tôi ở đây .


Nếu bạn không cần phải chạy fsck một cách cụ thể, mà chỉ muốn kiểm tra sự phân mảnh ổ đĩa của bạn, tập lệnh sau (được lấy từ đây ) nên thực hiện thủ thuật:

#!/usr/bin/perl -w

#this script search for frag on a fs
use strict;

#number of files
my $files = 0;
#number of fragment
my $fragments = 0;
#number of fragmented files
my $fragfiles = 0;

#search fs for all file
open (FILES, '-|', "find '$ARGV[0]' -xdev -type f -print0");

$/ = "\0";

while (defined (my $file = <FILES>)) {
        open (FRAG, "-|", "filefrag", $file);
        my $res = <FRAG>;
        if ($res =~ m/.*:\s+(\d+) extents? found/) {
                my $fragment = $1;
                $fragments += $fragment;
                if ($fragment > 1) {
                        $fragfiles++;
                }
                $files++;
        } else {
                print ("$res : not understand for $file.\n");
        }
        close (FRAG);
}
close (FILES);

print ( $fragfiles / $files * 100 . "% non contiguous files, " . $fragments / $files . " average fragments.\n"); 

Sau đó, bạn có thể chạy nó trên thư mục (hoặc điểm gắn kết) trong câu hỏi:

$ frag_check.pl $HOME/
  1.32410691664555% non contiguous files, 1.05380668862427 average fragments.

Đó chỉ là gọi fsck trên phân vùng, và như cả hai chúng ta đều biết, nó sẽ phá hủy một phân vùng được gắn kết. Có cách nào để sử dụng fsck theo cách chỉ đọc, cho tôi biết cách phân mảnh-đĩa của tôi không?
Peltier

Không xa như tôi biết, @Peltier. Tôi đã nghĩ rằng bạn có thể khởi động vào một runlevel thấp hơn, ngắt kết nối đĩa có liên quan và chạy fsck. Trong mọi trường hợp, nghiêm túc, bạn gần như chắc chắn có thể bỏ qua phân mảnh trên hầu hết các hệ thống linux.
terdon

@Peltier, xem câu trả lời cập nhật của tôi.
terdon

1
Vâng, nó chậm. Hãy nhớ rằng bạn đã mất ~ 2-3 phút trên 500GB / nhà / phân vùng của tôi. Một lần nữa, tôi nhấn mạnh, việc phân mảnh không thực sự là vấn đề nữa. Đặc biệt nếu bạn đang sử dụng hệ thống tập tin EXT3-4.
terdon

1
@KentFredric ơi! Vâng, thực sự. Tôi thấy những gì bạn có nghĩa là bây giờ. Tôi chỉnh sửa cho phù hợp, cảm ơn. Hãy xóa các bình luận để loại bỏ sự lộn xộn.
terdon 6/2/2016

0

Bạn có thể sử dụng một công cụ như e2defrag để có được thông tin này.

Hãy nhớ rằng vì bản chất của các hệ thống tệp Linux, việc chống phân mảnh thường là không cần thiết.


Bạn có phiền chi tiết câu trả lời của bạn? Tôi đã cố gắng để có được thông tin đó e4defrag -c, nhưng nó không hoạt động.
Peltier

@Peltier Trỏ nó tới một điểm số Ext3 hoặc Ext4 sau -ctùy chọn làm đối số cuối cùng. Và ... "không hoạt động"? Lỗi bạn nhận được là gì?
gertvdijk

Nó nói "Xong". Tôi đã không, tuy nhiên, chỉ trực tiếp vào thiết bị, nhưng đến điểm gắn kết. Tôi đang thử lại với thiết bị.
Peltier

Lưu ý rằng nó tốn rất nhiều thời gian, trong khi fsck rất nhanh.
Peltier

Chỉ cần thử lại với thiết bị, nó chỉ nói "Xong".
Peltier
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.