激情欧美日韩国产在线专区,亚洲国产成人精品AV区按摩,无码少妇一区二区三区免费,成人午夜福利在线观看

立即咨詢
2024.09.27 |
硬盤分區(qū)顯示不一致:奇怪Bug引發(fā)的思考與試錯
今天我們要聊的是我遇到的一個奇怪的bug。

那天下午,陽光透過辦公室的窗戶灑在桌面上,我剛剛處理完一個棘手的bug,正享受著一杯茶的寧靜時光。然而,這份寧靜很快被一陣急促的電話鈴聲打破。

“我們在做虛擬機磁盤擴容,遇到一個奇怪的問題,你能幫忙看看嗎?”電話那頭的聲音透著焦急。

我調整了一下狀態(tài),心中略顯興奮?;貜偷溃骸皠e擔心,我馬上來。”


一、故障描述


在使用不同的磁盤分區(qū)工具(如`fdisk`和`parted`)時,發(fā)現它們顯示的分區(qū)類型不一致。這種情況看似微小,但實際上可能引發(fā)一系列嚴重問題,影響數據安全和系統(tǒng)穩(wěn)定性。


# fdisk  -l /dev/sda
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk label type: dosDisk identifier: 0x00000000
  Device Boot      Start         End      Blocks   Id  System/dev/sda1               1   104857599    52428799+  ee  GPT# parted  -s /dev/sda unit s printModel: VMware Virtual disk (scsi)Disk /dev/sda: 125829120sSector size (logical/physical): 512B/512BPartition Table: gptDisk Flags:
Number  Start     End         Size        File system  Name                  Flags 1      2048s     411647s     409600s     fat16        EFI System Partition  boot 2      411648s   2508799s    2097152s    xfs 3      2508800s  104855551s  102346752s



二、初步排查


為了進一步了解問題,首先檢查了`fdisk`的版本。版本信息顯示,`fdisk`來自`util-linux 2.23.2`。


1.查看fdisk軟件版本

# which fdisk
/usr/sbin/fdisk
# rpm -qf /usr/sbin/fdisk
util-linux-2.23.2-59.el7.x86_64


2.查看版本


# fdisk -v
fdisk from util-linux 2.23.2


3.查看分區(qū)表


# fdisk -lu /dev/sda
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 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 label type: dos
Disk identifier: 0x00000000
 Device Boot Start End Blocks Id System
 /dev/sda1 1 104857599 52428799+ ee GPT
 # fdisk -lu /dev/sda
 Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 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 label type: dosDisk identifier: 0x00000000 
 Device Boot Start End Blocks Id System
 /dev/sda1 1 104857599 52428799+ ee GPT
 # parted -s /dev/sda unit s print
 Model: VMware Virtual disk (scsi)
 Disk /dev/sda: 125829120s
 Sector size (logical/physical): 512B/512B
 Partition Table: gpt
 Disk Flags:
 Number Start End Size File system Name Flags
  1 2048s 411647s 409600s fat16 EFI System Partition boot 
  2 411648s 2508799s 2097152s xfs 
  3 2508800s 104855551s 102346752s lvm


三、試錯與分析


在初步排查中,發(fā)現`fdisk`的版本較舊(`util-linux 2.23.2`)。通常情況下,較新的工具版本會修復舊版本中的一些已知問題。因此,首先想到的是通過升級`util-linux`來解決問題,期望新版本能夠正確處理分區(qū)顯示問題。


# rpm -Uvh util-linux-2.23.2-65.el7_9.1.x86_64.rpm --force --nodeps
warning: util-linux-2.23.2-65.el7_9.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ################################# [100%]
Updating / installing...
 1:util-linux-2.23.2-65.el7_9.1 ################################# [ 50%]
 Cleaning up / removing...
  2:util-linux-2.23.2-59.el7 ################################# [100%]


但是很遺憾,升級后`fdisk`的顯示仍然異常。


# fdisk -l
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 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 label type: dosDisk identifier: 0x00000000 
Device Boot Start End Blocks Id System
/dev/sda1 1 104857599 52428799+ ee GPT


此時,我開始懷疑分區(qū)表本身可能存在問題。


為了進一步驗證這一假設,決定備份MBR扇區(qū),并清空MBR,期望通過重新構建分區(qū)表來解決問題。



1.查看扇區(qū)


圖片


2.備份mbr


dd if=/dev/sda of=sda_mbr.data bs=512 count=1


3.清空mbr


dd if=/dev/zero of=/dev/sda bs=512 count=1

# dd if=/dev/zero of=/dev/sda bs=512 count=1

1+0 records in

1+0 records out

512 bytes (512 B) copied, 0.000450755 s, 1.1 MB/s


圖片


然而,不幸的是,再次分區(qū)表丟失。


# fdisk -l /dev/sda
Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 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
# parted /dev/sda print
Error: /dev/sda: unrecognised disk label
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 64.4GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:


這個也讓我意識到,問題的根源可能比想象中的要復雜。


文章到這里,大家不妨停一下,思考一下。如果是你,接下來你打算分幾步來分析,又需要哪些信息來幫助你找到問題的原因,并且如何解決呢… ...
(思考時間)



四、故障分析


如果你已經有了答案,不妨一起來看看我的分析。


在試錯過程中,發(fā)現`fdisk`和`parted`顯示的分區(qū)信息不一致。`fdisk`顯示的分區(qū)類型與預期不符,而`parted`則顯示正常。這引起了的注意,開始懷疑是否是分區(qū)表本身的問題。
進一步分析發(fā)現,磁盤在之前被擴展到60GB。GPT分區(qū)表包括主分區(qū)表和備份分區(qū)表,正常情況下,主分區(qū)表位于硬盤的LBA1~LBA33,而備份分區(qū)表位于硬盤的最后位置。如果磁盤大小被調整后,備份分區(qū)表沒有正確更新,就會導致`fdisk`顯示異常。



圖片

圖片


五、故障模擬


為了驗證這一假設,我模擬了在GPT環(huán)境下擴展分區(qū)的情況,果然復現了相同的故障。


模擬故障在gpt環(huán)境下拉大sda分區(qū),可以復現故障。
##擴容sda之前##


圖片


##擴容sda之后##


圖片


六、故障原因


至此,故障原因也就很清晰了。在創(chuàng)建GUID分區(qū)表(GPT)時,系統(tǒng)會同時創(chuàng)建一個MBR(msdos)分區(qū)表,其中包含一個覆蓋整個磁盤或高達2TB的0xEE(GPT)分區(qū),稱為MBR保護分區(qū)。這個分區(qū)用于提醒舊命令和實用程序磁盤確實已分區(qū)。


GPT分區(qū)表包括主分區(qū)表和備份分區(qū)表。正常情況下,主分區(qū)表位于硬盤的LBA1~LBA33,而備份分區(qū)表位于硬盤的最后位置。如果磁盤大小被調整后,備份分區(qū)表沒有正確更新,就會導致`fdisk`顯示異常。



圖片

正常gpt分區(qū) 通過hexdump查看,200是主分區(qū)開始,033ffe00 是secondary (backup) 分區(qū)。



</pre&gt


相關推薦
助力IT企業(yè)信創(chuàng)服務,和企業(yè)一起走向成功
立即領取企業(yè)福利 預約您的專屬顧問
400-688-6069