Khắc phục hình học xấu EXT4-fs (số khối vượt quá kích thước của thiết bị)


23

Tôi có thẻ micro SD có phân vùng FAT32 và phân vùng EXT4. Phân vùng EXT4 sẽ không còn gắn kết. dmesg hiển thị lỗi sau:

EXT4-fs (sdb2): bad geometry: block count 2199023779840 exceeds size of device (524288 blocks)

Tôi đã Googled, nhưng vẫn không hiểu đầy đủ vấn đề ở đâu (trong bảng phân vùng? Hệ thống tập tin?) Cũng như cách khắc phục. Tôi đã thử một số giải pháp:

  • Sử dụng testdisk để viết bảng phân vùng
  • Sử dụng fsck để khôi phục siêu khối từ các bản sao lưu (Tôi đã thử tất cả chúng). ví dụfsck.ext4 -b 163840 -B 4096 /dev/sdb2
  • Sử dụng fsck -ccđể kiểm tra các khối xấu
  • Sử dụng resize2fs để đặt kích thước của phân vùng. Đầu ra:The combination of flex_bg and !resize_inode features is not supported by resize2fs.

Khi tôi chạy fsck, nó xuất hiện một loạt lỗi (đầu ra đầy đủ bên dưới), mà nó tuyên bố sẽ sửa. Tuy nhiên, nếu tôi chạy lại nó, nó sẽ hiển thị cùng một lỗi một lần nữa, mọi lúc.

Làm cách nào để khắc phục sự cố hình học xấu và làm cho hệ thống tập tin của tôi có thể gắn kết trở lại? Làm sao chuyện này lại xảy ra?

đầu ra fsck:

e2fsck 1.42 (29-Nov-2011)
One or more block group descriptor checksums are invalid.  Fix<y>? yes

Group descriptor 0 checksum is invalid.  FIXED.
Group descriptor 1 checksum is invalid.  FIXED.
Group descriptor 2 checksum is invalid.  FIXED.
Group descriptor 3 checksum is invalid.  FIXED.
Group descriptor 4 checksum is invalid.  FIXED.
Group descriptor 5 checksum is invalid.  FIXED.
Group descriptor 6 checksum is invalid.  FIXED.
Group descriptor 7 checksum is invalid.  FIXED.
Group descriptor 8 checksum is invalid.  FIXED.
Group descriptor 9 checksum is invalid.  FIXED.
Group descriptor 10 checksum is invalid.  FIXED.
Group descriptor 11 checksum is invalid.  FIXED.
Group descriptor 12 checksum is invalid.  FIXED.
Group descriptor 13 checksum is invalid.  FIXED.
Group descriptor 14 checksum is invalid.  FIXED.
Group descriptor 15 checksum is invalid.  FIXED.
/dev/sdb2 contains a file system with errors, check forced.
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
Free blocks count wrong for group #0 (24465, counted=24466).
Fix<y>? yes

Free blocks count wrong for group #2 (4788, counted=5812).
Fix<y>? yes

Free blocks count wrong for group #3 (8710, counted=8881).
Fix<y>? yes

Free blocks count wrong for group #8 (5682, counted=22066).
Fix<y>? yes

Free blocks count wrong (299742, counted=317322).
Fix<y>? yes

Inode bitmap differences:  -(8193--8194) -8197 -8208 -(8225--8226) -8229 -(8240--8241) -(8257--8258) -8261 -8272 -8274 -(8289--8290) -8293 -(8304--8306) -(8321--8322) -8325 -8336 -8339 -16387 -16389 -16400 -16419 -16421 -(16432--16433) -16451 -16453 -16464 -16466 -16483 -16485 -(16496--16498) -16515 -16517 -16528 -16531 -24577 -24579 -24581 -24592 -24609 -24611 -24613 -(24624--24625) -24641 -24643 -24645 -24656 -24658 -24673 -24675 -24677 -(24688--24690) -24705 -24707 -24709 -24720 -24723 -(32770--32771) -32773 -32784 -(32802--32803) -32805 -(32816--32817) -(32834--32835) -32837 -32848 -32850 -(32866--32867) -32869 -(32880--32882) -(32898--32899) -32901 -32912 -32915 -(40961--40963) -40965 -40976 -(40993--40995) -40997 -(41008--41009) -(41025--41027) -41029 -41040 -41042 -(41057--41059) -41061 -(41072--41074) -(41089--41091) -41093 -41104 -41107 -(49156--49157) -49168 -(49188--49189) -(49200--49201) -(49220--49221) -49232 -49234 -(49252--49253) -(49264--49266) -(49284--49285) -49296 -49299 -57345 -(57348--57349) -57360 -57377 -(57380--57381) -(57392--57393) -57409 -(57412--57413) -57424 -57426 -57441 -(57444--57445) -(57456--57458) -57473 -(57476--57477) -57488 -57491 -65538 -(65540--65541) -65552 -65570 -(65572--65573) -(65584--65585) -65602 -(65604--65605) -65616 -65618 -65634 -(65636--65637) -(65648--65650) -65666 -(65668--65669) -65680 -65683 -(73729--73730) -(73732--73733) -73744 -(73761--73762) -(73764--73765) -(73776--73777) -(73793--73794) -(73796--73797) -73808 -73810 -(73825--73826) -(73828--73829) -(73840--73842) -(73857--73858) -(73860--73861) -73872 -73875 -(81923--81925) -81936 -(81955--81957) -(81968--81969) -(81987--81989) -82000 -82002 -(82019--82021) -(82032--82034) -(82051--82053) -82064 -82067 -90113 -(90115--90117) -90128 -90145 -(90147--90149) -(90160--90161) -90177 -(90179--90181) -90192 -90194 -90209 -(90211--90213) -(90224--90226) -90241 -(90243--90245) -90256 -90259 -(98306--98309) -98320 -(98338--98341) -(98352--98353) -(98370--98373) -98384 -98386 -(98402--98405) -(98416--98418) -(98434--98437) -98448 -98451 -(106497--106501) -106512 -(106529--106533) -(106544--106545) -(106561--106565) -106576 -106578 -(106593--106597) -(106608--106610) -(106625--106629) -106640 -106643 -114694 -114704 -114726 -(114736--114737) -114758 -114768 -114770 -114790 -(114800--114802) -114822 -114832 -114835 -122881 -122886 -122896 -122913 -122918 -(122928--122929) -122945 -122950 -122960 -122962 -122977 -122982 -(122992--122994) -123009 -123014 -123024 -123027
Fix<y>? yes

Free inodes count wrong for group #0 (7803, counted=7804).
Fix<y>? yes

Free inodes count wrong (130683, counted=130684).
Fix<y>? yes


/dev/sdb2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdb2: 388/131072 files (22.7% non-contiguous), 206966/524288 blocks

fdisk -l đầu ra:

Disk /dev/sdb: 16.0 GB, 16012804096 bytes
64 heads, 32 sectors/track, 15271 cylinders, total 31275008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005ce93

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048    27080703    13539328    c  W95 FAT32 (LBA)
/dev/sdb2        27080704    31275007     2097152   83  Linux

Bạn có thể bao gồm đầu ra từ fdisk -lcho thẻ này?
Timo

@Timo xin lỗi, quên trả lời bạn. Tôi đã cập nhật câu hỏi với đầu ra fdisk
Michael

Câu trả lời:


9

Vấn đề tương tự sau khi cắt bớt hình ảnh thẻ SD trong đó SD có ít hơn một vài khối so với ban đầu. Phân vùng lại ổ đĩa bằng fdisk (xem bên trên), nhưng thông báo "Kích thước trong siêu khối khác với kích thước vật lý của phân vùng" vẫn còn. Tìm thấy giải pháp tại đây: http://www.linuxquestions.org/questions/linux-hardware-18/size-in-superblock-is-different-from-the-physical-size-of-the-partition-298175/

Vì vậy, trên phân vùng chưa từng có: e2fsck -f /dev/XXX resize2fs /dev/XXX


3

Hệ thống tập tin không quan tâm đến hình học đĩa; đây là một vấn đề bảng phân vùng.

Tôi đề nghị bạn tạo một kết xuất của bảng phân vùng, kiểm tra kết quả và ghi đè lên bảng phân vùng với kết xuất này. Điều đó sẽ sửa các mục CHS.

sfdisk -d /dev/sdx >sdx.txt
cat sdx.txt
sfdisk /dev/sdx <sdx.txt

1
Bạn sẽ cần phải root để chạy các lệnh này, trong trường hợp bạn không biết điều này.
slm

1
Cảm ơn câu trả lời của bạn. Có một lý do sfdisk nên làm việc để viết bảng phân vùng trong đó testdisk không? Tôi đã thử nó và sfdisk tuyên bố nó đã viết thành công bảng phân vùng, nhưng tôi vẫn nhận được lỗi hình học xấu. Đầu ra của sfdisk -dgiống nhau trước và sau khi viết. Tôi đã bỏ lỡ một cái gì đó? Còn suy nghĩ nào khác không?
Michael

@Michael Nói thật: Tôi không để ý rằng tôi cũng không biết nó testdisklà gì . Internet cho tôi biết: "kiểm tra và phục hồi các phân vùng bị mất". Nếu đó chỉ là cho các phân vùng bị mất tại sao nó phải sửa chữa các phân vùng hiện có?
Hauke ​​Laging

@HaukeLaging Tôi chỉ hỏi vì nó nói nó viết lại bảng phân vùng. Dù sao, bất kỳ ý tưởng về kết quả sfdisk?
Michael

3

Tôi có khá nhiều vấn đề tương tự, cố gắng gắn kết đã cho:

$sudo mount /dev/sda2 ./oldfs/ 
mount: wrong fs type, bad option, bad superblock on /dev/sda2,
   missing codepage or helper program, or other error
   In some cases useful info is found in syslog - try
   dmesg | tail  or so

Tôi đã thử viết lại phần trên của bảng, nhưng không thành công.

Vì vậy, cuối cùng tôi đã có thể giải quyết vấn đề bằng cách phân vùng lại ổ đĩa của mình thông qua fdisk. Tôi đã xóa phân vùng thứ 2 của mình và tạo lại nó một lần nữa.

$fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 31.4 GB, 31440502784 bytes
64 heads, 32 sectors/track, 29984 cylinders, total 61407232 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ecdca

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    20447231    10222592   83  Linux
/dev/sda2        20447232    61406208    20479488+  83  Linux

Command (m for help): d
Partition number (1-4): 2

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 
Using default value 2
First sector (20447232-61407231, default 20447232): 
Using default value 20447232
Last sector, +sectors or +size{K,M,G} (20447232-61407231, default 61407231): 
Using default value 61407231

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

làm việc hoàn hảo, đó là vô lý, nhưng hey.
mgjk

Không làm việc cho tôi.
David Kennedy

2

Tôi đã có cùng một vấn đề với một tệp hình ảnh, tức là không có bất kỳ bảng phân vùng nào, vì vậy vấn đề nằm trong chính hệ thống tệp. Tôi đã có thể sửa nó bằng cách chỉ làm một resize2fstập tin hình ảnh.


Tôi gặp vấn đề với thẻ eMMC được định dạng sẵn. resize2fs trên phân vùng ext4 bị lỗi đã giải quyết vấn đề.
Peter Gloor

0

Vì tôi không thể tìm thấy bất kỳ giải pháp nào khác, tôi đã định dạng lại phân vùng EXT4. Điều này đã loại bỏ các lỗi hình học xấu. Ước gì tôi biết tại sao.

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.