分页: 2 / 2

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-25 10:16
cnkilior
用fdisk从
/dev/sda7 20735 25956 41945683+ 7 HPFS/NTFS
开始,到
/dev/sda12 10292 20734 83883366 83 Linux

一个一个地删除分区(不要同时删除两个),并立刻重建,就能恢复正常分区顺序。
这样还不会影响到磁盘中的数据。

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-25 10:28
qingdaoocean
hcym 写了:不听人话,鬼牵着乱转
:em20 是出事之后查资料才知道自己错的,事先知道这样会出问题就不这么搞了 :em02

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-25 10:28
qingdaoocean
黄美姬 写了:什么我看出这么多主分区呀, :em04
:em23 现在不就两个吗?

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-25 10:32
qingdaoocean
cnkilior 写了:用fdisk从
/dev/sda7 20735 25956 41945683+ 7 HPFS/NTFS
开始,到
/dev/sda12 10292 20734 83883366 83 Linux

一个一个地删除分区(不要同时删除两个),并立刻重建,就能恢复正常分区顺序。
这样还不会影响到磁盘中的数据。
请问为什么要从sda7开始?按照你说的步骤,sda2能自动把end改为最后的38913吗?

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-25 11:50
billbear
1、现在为什么还是分区重叠?逻辑分区为什么能跑到扩展分区之外?
主分区表可以有四个表项,如果其中一个是扩展分区,那么在扩展分区的起始处有第一个逻辑分区表,构造和主分区表相同,也有4个位置,但是只使用2个,第一项标明了第一个逻辑分区sda5,第二项仍标示为扩展分区,但是是一个缩小了的扩展分区,起始点是下一张逻辑分区表的位置,终点不变。然后在新扩展分区的起始去读下一个逻辑分区的信息,链式地进行直到最后一张逻辑分区表里不再标示新的扩展分区为止。OS X 下的 fdisk 信息,可以清晰看见每一张逻辑分区表:(它是给出 start - size 而非 start - end)

代码: 全选

bill-beardemacbook:~ billbear$ fdisk /dev/rdisk1
Disk: /dev/rdisk1 geometry: 19457/255/63 [312581808 sectors]
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
*1: AF 0 1 1 - 1023 254 63 [ 63 - 17039360] HFS+
2: AF 1023 254 63 - 1023 254 63 [ 17039484 - 63176704] HFS+
3: 0B 1023 254 63 - 1023 254 63 [ 80216199 - 167772160] Win95 FAT-32
4: 05 1023 254 63 - 1023 254 63 [ 247995405 - 64581300] Extended DOS
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 83 1023 254 63 - 1023 254 63 [ 247995468 - 29286432] Linux files*
2: 05 1023 254 63 - 1023 254 63 [ 277281900 - 33206355] Extended DOS
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 83 1023 254 63 - 1023 254 63 [ 277281963 - 33206292] Linux files*
2: 05 1023 254 63 - 1023 254 63 [ 310488255 - 2088450] Extended DOS
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 82 1023 254 63 - 1023 254 63 [ 310488318 - 2088387] Linux swap
2: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused 
正常的分区表,每一张逻辑分区表里标示的扩展分区的终点都和主分区表里标示的扩展分区的终点相同。你的分区表在某一个逻辑分区表处扩展分区终点被扩大以包含超出主表里扩展分区范围外的逻辑分区。这就无法通过分区表合法性的检查,这种扩展分区们终点不一致的错误,大概也被 parted 归为分区重叠。

产生这样错误的原因,很可能是原先的扩展分区乱序,而后使用了 windows 下的分区工具。linux 允许乱序的分区并且经常这么做,比如缩小sda6,在 sda6 和 sda7 之间创建新分区,那么新的 sda8 会位于 6 和 7 之间,这样做是为了保证老分区的设备名不变以免影响原有 grub 的引导。而 windows 通常会把原来的 sda7 改为 sda8,新插入的分区作为 sda7。windows 保证分区的顺序排列而 linux 保证老分区设备名不变。乱序的主分区 windows 分区工具在调整时通常能够处理而不致搞坏分区表(但是它一定会重排分区而可能导致 linux 的引导问题),乱序的逻辑分区比较麻烦,因为链式的扩展分区的起点忽前忽后而不是递增,windows下很多分区工具设计时就不曾预料分区表可以是这样而无法正确处理。所以在安装之前尽量在 linux 下先把分区顺序整理一下以避免留下隐患。fdisk 里面有个 Expert command ,里面可以 fix partition order。


2、现在从sda8往后的逻辑分区跑到了扩展分区的后面。我有一个想法:把从sda2开始往后的全都删掉,新建sda2,起始分别为 6376,38913.然后一步步新建sda5之后的分区,各分区起始位置保持以上不变,这样是不是就可以恢复了,而且一般情况下各分区数据还在?(我已经以防万一把数据备份了,就算不在了也不要紧,只是问下从原理上讲是不是这样?)

想法是可行的,不过 fdisk -l 给出的是不够精细的结果,必须要根据 fdisk -lu 的精确结果来做。删除的时候要先删逻辑分区,然后删扩展分区。如果先删 sda2,逻辑分区瞬间就全部消失,再建立 sda2 时原来的逻辑分区又全部出现。
新建分区的时候注意设置正确的分区 id。你在 13 楼新建的 sda12 id 不对。(而且你没有原先的 fdisk -lu 信息, sda12 的起止不一定正确)
如果没能成功,testdisk 应该可以挽救。

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-25 14:04
黄美姬
删除8-11就行

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-27 9:10
qingdaoocean
billbear 写了:1、现在为什么还是分区重叠?逻辑分区为什么能跑到扩展分区之外?
主分区表可以有四个表项,如果其中一个是扩展分区,那么在扩展分区的起始处有第一个逻辑分区表,构造和主分区表相同,也有4个位置,但是只使用2个,第一项标明了第一个逻辑分区sda5,第二项仍标示为扩展分区,但是是一个缩小了的扩展分区,起始点是下一张逻辑分区表的位置,终点不变。然后在新扩展分区的起始去读下一个逻辑分区的信息,链式地进行直到最后一张逻辑分区表里不再标示新的扩展分区为止。OS X 下的 fdisk 信息,可以清晰看见每一张逻辑分区表:(它是给出 start - size 而非 start - end)

代码: 全选

bill-beardemacbook:~ billbear$ fdisk /dev/rdisk1
Disk: /dev/rdisk1 geometry: 19457/255/63 [312581808 sectors]
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
*1: AF 0 1 1 - 1023 254 63 [ 63 - 17039360] HFS+
2: AF 1023 254 63 - 1023 254 63 [ 17039484 - 63176704] HFS+
3: 0B 1023 254 63 - 1023 254 63 [ 80216199 - 167772160] Win95 FAT-32
4: 05 1023 254 63 - 1023 254 63 [ 247995405 - 64581300] Extended DOS
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 83 1023 254 63 - 1023 254 63 [ 247995468 - 29286432] Linux files*
2: 05 1023 254 63 - 1023 254 63 [ 277281900 - 33206355] Extended DOS
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 83 1023 254 63 - 1023 254 63 [ 277281963 - 33206292] Linux files*
2: 05 1023 254 63 - 1023 254 63 [ 310488255 - 2088450] Extended DOS
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: 82 1023 254 63 - 1023 254 63 [ 310488318 - 2088387] Linux swap
2: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused 
正常的分区表,每一张逻辑分区表里标示的扩展分区的终点都和主分区表里标示的扩展分区的终点相同。你的分区表在某一个逻辑分区表处扩展分区终点被扩大以包含超出主表里扩展分区范围外的逻辑分区。这就无法通过分区表合法性的检查,这种扩展分区们终点不一致的错误,大概也被 parted 归为分区重叠。

产生这样错误的原因,很可能是原先的扩展分区乱序,而后使用了 windows 下的分区工具。linux 允许乱序的分区并且经常这么做,比如缩小sda6,在 sda6 和 sda7 之间创建新分区,那么新的 sda8 会位于 6 和 7 之间,这样做是为了保证老分区的设备名不变以免影响原有 grub 的引导。而 windows 通常会把原来的 sda7 改为 sda8,新插入的分区作为 sda7。windows 保证分区的顺序排列而 linux 保证老分区设备名不变。乱序的主分区 windows 分区工具在调整时通常能够处理而不致搞坏分区表(但是它一定会重排分区而可能导致 linux 的引导问题),乱序的逻辑分区比较麻烦,因为链式的扩展分区的起点忽前忽后而不是递增,windows下很多分区工具设计时就不曾预料分区表可以是这样而无法正确处理。所以在安装之前尽量在 linux 下先把分区顺序整理一下以避免留下隐患。fdisk 里面有个 Expert command ,里面可以 fix partition order。


2、现在从sda8往后的逻辑分区跑到了扩展分区的后面。我有一个想法:把从sda2开始往后的全都删掉,新建sda2,起始分别为 6376,38913.然后一步步新建sda5之后的分区,各分区起始位置保持以上不变,这样是不是就可以恢复了,而且一般情况下各分区数据还在?(我已经以防万一把数据备份了,就算不在了也不要紧,只是问下从原理上讲是不是这样?)

想法是可行的,不过 fdisk -l 给出的是不够精细的结果,必须要根据 fdisk -lu 的精确结果来做。删除的时候要先删逻辑分区,然后删扩展分区。如果先删 sda2,逻辑分区瞬间就全部消失,再建立 sda2 时原来的逻辑分区又全部出现。
新建分区的时候注意设置正确的分区 id。你在 13 楼新建的 sda12 id 不对。(而且你没有原先的 fdisk -lu 信息, sda12 的起止不一定正确)
如果没能成功,testdisk 应该可以挽救。
不好意思,这几天事情比较多,没来得及及时看帖~感谢billbear的详细解释,学习了 :em11
发现自己对分区表还不了解,先google学习下 :em02

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-27 9:12
qingdaoocean
黄美姬 写了:删除8-11就行
请问这样sda2就自动把end改为最后的38913吗?10.04发布之后就大胆试下 :em11

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-30 13:25
qingdaoocean
billbear 写了: 想法是可行的
今天下好了10.04的镜像,大胆用fdisk修复了一下,事实证明这种想法确实可行。我按照你的提示,用fdisk先删掉所有逻辑分区,然后删掉sda2。然后新建sda2,end用默认最大值,然后依次新建逻辑分区,start和end不变(需要保留数据的分区当然要不变,但是有几个分区是我确实想改的,所以那个改了)。写了之后一切正常了,ubuntu各分区的数据都还在 :em11

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-04-30 13:27
qingdaoocean
现在把新的分区信息贴出来:

代码: 全选

ocean@ocean-desktop:~$ sudo fdisk -l

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x7c797c79

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        6375    51207156    7  HPFS/NTFS
/dev/sda2            6376       38913   261361485    5  Extended
/dev/sda5            6376       10291    31455238+  83  Linux
/dev/sda6           10292       20734    83883366   83  Linux
/dev/sda7           20735       25956    41945683+  83  Linux
/dev/sda8           25957       29993    32427171   83  Linux
/dev/sda9           29994       32483    20000893+  83  Linux
/dev/sda10          32484       38562    48829536   83  Linux
/dev/sda11          38563       38913     2819376   83  Linux
ocean@ocean-desktop:~$ sudo parted /dev/sda print
Model: ATA ST3320613AS (scsi)
磁盘 /dev/sda: 320GB
Sector size (logical/physical): 512B/512B
分区表:msdos

数字  开始:  End     大小    类型      文件系统        标志
 1    32.3kB  52.4GB  52.4GB  primary   ntfs            启动
 2    52.4GB  320GB   268GB   extended
 5    52.4GB  84.6GB  32.2GB  logical   ntfs
 6    84.6GB  171GB   85.9GB  logical   ntfs
 7    171GB   213GB   43.0GB  logical   ntfs
 8    213GB   247GB   33.2GB  logical   ext4
 9    247GB   267GB   20.5GB  logical   ext4
10    267GB   317GB   50.0GB  logical   ext4
11    317GB   320GB   2887MB  logical   linux-swap(v1)

ocean@ocean-desktop:~$

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-05-01 23:43
billbear
Device Boot Start End Blocks Id System
/dev/sda1 * 1 6375 51207156 7 HPFS/NTFS
/dev/sda2 6376 38913 261361485 5 Extended
/dev/sda5 6376 10291 31455238+ 83 Linux
/dev/sda6 10292 20734 83883366 83 Linux
/dev/sda7 20735 25956 41945683+ 83 Linux
/dev/sda8 25957 29993 32427171 83 Linux
/dev/sda9 29994 32483 20000893+ 83 Linux
/dev/sda10 32484 38562 48829536 83 Linux
/dev/sda11 38563 38913 2819376 83 Linux
这几个 ID 最好改一下

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-05-02 0:09
qingdaoocean
billbear 写了: 这几个 ID 最好改一下
多谢提醒。这几天事情比较多,没来得及好好研究分区表知识……明天google一下,不明白的话恐怕还要向你请教诶 :em02

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-05-02 0:16
wangdu2002
又进来跟熊哥学习了。。。 :em11
苹果的Fdisk这么强。。。不如熊哥把它移植到Linux系统中来吧。 :em06

Re: GParted显示未分配 终端提示分区之间不能重叠

发表于 : 2010-05-02 0:43
billbear
:em06