/dev/sda2를 열려고 할 때 짧게 읽으십시오.

/dev/sda2를 열려고 할 때 짧게 읽으십시오.

방금 호스트 컴퓨터의 .vdi 크기를 15.5G에서 120G로 조정했습니다. 게스트(우분투 서버)를 사용하여 파티션 크기를 조정하려고 합니다.resize2fs

root@ubuntu:~# sudo resize2fs /dev/sda2 115G
resize2fs 1.42.13 (17-May-2015)
resize2fs: Attempt to read block from filesystem resulted in short read while trying to open /dev/sda2
Couldn't find valid filesystem superblock.

이제 제가 이해한 바에 따르면 상황은 /dev/sda2부패했습니다. 그러나 내 서버 VM은 여전히 ​​잘 작동하고 아무런 문제 없이 파티션에서 실행됩니다. fdisk -l /dev/sda산출:

Disk /dev/sda: 120 GiB, 128849018880 bytes, 251658240 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
Disklabel type: dos
Disk identifier: 0x32955267

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *       2048   999423   997376  487M 83 Linux
/dev/sda2       1001470 33552383 32550914 15.5G  5 Extended
/dev/sda5       1001472 33552383 32550912 15.5G 8e Linux LVM

이제 제 질문은 이것이 서버에 정상적이고 건강한가요?입니다. 작동하지 않는 경우 어떻게 수정합니까?

답변1

resize2fse2fsprogs 제품군의 다른 도구는 read시스템 호출이 요청된 전체 크기를 반환하거나 오류가 발생한다고 가정합니다. 일반적으로 이는 사실이 아닙니다. read더 적은 값을 반환하는 것이 허용되므로 루프에서 호출해야 합니다. 나는 Linux 커널이 read특정 상황에서 블록 장치의 모든 데이터를 반환한다고 보장한다고 생각했지만 과거에는 e2fsprogs가 커널에 대해 잘못된 가정을 했기 때문에 이 문제로 인해 어려움을 겪었습니다.

e2fsprogs가 반복되지 않는다는 사실은 read실제로 버그입니다. 기껏해야 이것은 제한 사항입니다.아마도코드가 작성된 방식이 정확합니다.일부블록 장치에 액세스할 때 Linux 커널 버전입니다. 그러나 이 제한 사항은 어디에도 문서화되어 있지 않습니다. 이미지 파일에 접근할 때 이 코드에 확실히 뭔가 문제가 있는 것 같습니다.

커널 로그에서 오류를 확인하십시오. 커널이 오류를 보고하는 경우 문제는 resize2fs의 버그가 아닙니다(또는 적어도 잘못된 오류 보고일 뿐입니다).

커널이 디스크 오류를 보고하지 않으면 다음을 실행합니다.

strace -o resize2fs.strace sudo resize2fs /dev/sda2 115G

그리고 read시스템 호출을 확인해보세요.

읽기(3,"...",필요하다) =읽다

그렇다면 간략하게 읽어보세요.필요하다읽다. 이것을 관찰하고 재현할 수 있다면 버그 보고서를 작성할 가치가 있습니다. 이를 어떻게 트리거했는지 정확하게 설명하십시오. 정확한 커널 버전, 커널 컴파일 방법, resize2fs의 정확한 버전, 이를 관리하는 하드웨어 드라이버 /dev/sda, 실행되는 가상 머신 소프트웨어. 업스트림은 일반적으로 비전문가와 대화하는 데 능숙하지 않기 때문에 업스트림보다는 Ubuntu에 버그를 보고하는 것이 좋습니다.

관련 정보