如何在不丢失数据的情况下调整ext3分区大小
版本1.0
作者:Falko Timme
本文是关于在不丢失数据的情况下调整ext3分区大小。 它显示了如何缩小和扩大现有的ext3分区以及如何合并两个ext3分区。 如果您不使用LVM,并且您意识到现有的分区不再满足您的实际需求,这可能非常有用。
实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1初步说明
(我以root用户身份运行本教程中的所有命令,因此请确保以root用户身份登录。如果您使用的是Ubuntu系统,则可以这样做:
sudo su
)
我已经在一个Ubuntu Edgy Eft桌面系统上测试过这个系统,它具有一个大分区(大约10 GB,设备/ dev / sda1
)的所有文件。 分区看起来像这样:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.5G 4.1G 4.9G 46% /
varrun 94M 132K 94M 1% /var/run
varlock 94M 0 94M 0% /var/lock
udev 10M 52K 10M 1% /dev
devshm 94M 0 94M 0% /dev/shm
lrm 94M 18M 77M 19% /lib/modules/2.6.17-10-generic/volatile
当调整大小时,必须卸载要调整大小的分区; 显然这是不可能的,如果这是保存所有重要的系统文件的分区,如在这个例子。 因此,我们下载一个Live Linux-CD,例如Knoppix ,稍后我们启动(如果您有物理访问系统)。 如果是您没有物理访问权限的远程系统,那么您需要在该系统上安装一个救援系统(很多托管公司提供现在提供的救援系统的专用服务器),您可以启动(而不是Knoppix),以及此救援系统必须具有以下工具: fdisk
, umount
, fsck
, tune2fs
, e2fsck
, resize2fs
。
如果要调整大小的分区不保存任何系统文件(例如/ home
分区,备份分区等),则不需要Knoppix Live-CD或救援系统,因为所有步骤都可以从原始系统运行。
如果要在生产系统上调整分区大小,请先备份数据,因为如果不能正确计算新分区的大小(特别是缩小分区时),可能会丢失所有数据! 你被警告了! 有关备份的教程可以在这里找到: http : //www.youcl.com/taxonomy_menu/1/34
我将在本教程中调整/ dev / sda1的
大小。 如果您的分区的名称不同,请使用自己的设备(例如/ dev / hda5
, / dev / sdb3
等)替换/ dev / sda1
。
2收缩ext3分区
本章是关于缩小ext3分区的内容。 在这个例子中,我想收缩/ dev / sda1
。 首先我们收集一些关于我们原始系统的细节:
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 9859036 4234908 5123304 46% /
varrun 95480 132 95348 1% /var/run
varlock 95480 0 95480 0% /var/lock
udev 10240 52 10188 1% /dev
devshm 95480 0 95480 0% /dev/shm
lrm 95480 17580 77900 19% /lib/modules/2.6.17-10-generic/volatile
df -B 4k
Filesystem 4K-blocks Used Available Use% Mounted on
/dev/sda1 2464759 1058727 1280826 46% /
varrun 23870 33 23837 1% /var/run
varlock 23870 0 23870 0% /var/lock
udev 2560 13 2547 1% /dev
devshm 23870 0 23870 0% /dev/shm
lrm 23870 4395 19475 19% /lib/modules/2.6.17-10-generic/volatile
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.5G 4.1G 4.9G 46% /
varrun 94M 132K 94M 1% /var/run
varlock 94M 0 94M 0% /var/lock
udev 10M 52K 10M 1% /dev
devshm 94M 0 94M 0% /dev/shm
lrm 94M 18M 77M 19% /lib/modules/2.6.17-10-generic/volatile
fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1247 10016496 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
fdisk -s /dev/sda1
10016496
然后我们关闭系统并启动到我们的Knoppix Live-CD(或您的救援系统)(如果要调整大小的分区不具有任何系统文件,则可以从原始系统执行所有操作;步骤相同,省略引导到Knoppix /您的救援系统)。
shutdown -r now
Knoppix启动后,打开终端并通过运行成为根
su
默认情况下, / dev / sda1
应该被卸载,但是可以运行
umount /dev/sda1
去确定。
然后跑
fsck -n /dev/sda1
输出如下所示:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159037/1254176 files, 1095299/2504124 blocks
接下来,我们从/ dev / sda1
中删除日志,从而将其转换为一个ext2分区:
tune2fs -O ^has_journal /dev/sda1
输出如下所示:
tune2fs 1.38 (30-Jun-2005)
然后跑
e2fsck -f /dev/sda1
e2fsck 1.38 (30-Jun-2005)
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
/dev/sda1: 164178/1254176 files (0.6% non-contiguous), 1051617/2504124 blocks
现在我们使用resize2fs
调整文件系统的大小
。 resize2fs
可以调整ext2文件系统的大小,而不是ext3文件系统,这就是为什么我们不得不将/ dev / sda1
转换为ext2。 目前,在/ dev / sda1
中使用了4.1GB(请参阅上面的df -h
输出),所以可以将其从10GB缩小到约6GB(如果使其小于4.1GB,则会丢失数据!)。 所以我们跑
resize2fs /dev/sda1 6000M
输出如下:
resize2fs 1.38 (30-Jun-2005)
Resizing the filesystem on /dev/sda1 to 1536000 (4k) blocks.
The filesystem on /dev/sda1 is now 1536000 blocks long.
请注意块数( 1536000
)及其大小( 4k
)。 我们很快就需要了。
现在我们删除我们的/ dev / sda1
分区(不要害怕,没有数据将丢失),并创建一个新的,较小的分区(但仍然足够大以容纳我们调整大小的文件系统!)。 我们可以用fdisk
这样做
fdisk /dev/sda
(是的,是/ dev / sda
,不是/ dev / sda1
)
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
键入m
以获取所有命令的列表:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
现在我们删除分区号。 1( / dev / sda1
):
Command (m for help): d
Partition number (1-5): 1
接下来我们创建一个新的/ dev / sda1
分区。 这是以前的主分区,所以我们再次选择p
,再次是我们的分区号。 1:
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
p
Partition number (1-4): 1
现在是关键部分 - 我们被问及新分区的大小。 第一个圆筒是没有问题的,它是从本章开始的fdisk -l
输出( 1
)中的一个。
第一缸(1-1305,默认1):1
但是我们的新分区的最后一个圆筒没有值。 幸运的是,我们可以指定大小( 千
字节( K
)),所以我们计算这样的大小:
我们将resize2fs
输出( 1536000
)的块数乘以块的大小( 4k
),并确保分区足够大,我们添加3到5%(3%对我来说足够了,但是如果你想要确定取5%):
1536000 * 4k * 1.03 = 6328320k
所以我们用+
号加上这个值,用一个( K
)代替小k
并输入:
Last cylinder or +size or +sizeM or +sizeK (1-1247, default 1247): +6328320K
我们原来的/ dev / sda1
具有可引导标志(请参阅本章开头的fdisk -l
输出),因此我们必须再次将其添加到新的/ dev / sda1中
:
Command (m for help): a
Partition number (1-5): 1
现在我们来写我们的新分区表并退出fdisk
:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
现在我们重新启动系统,再次启动我们的Knoppix系统(救援系统;原始系统,如果调整大小的分区不持有系统文件):
shutdown -r now
再次成为root(Knoppix运行
su
)
然后运行:
fsck -n /dev/sda1
输出应如下所示:
fsck 1.38 (30-Jun-2005)
e2fsck 1.38 (30-Jun-2005)
/dev/sda1: clean, 159036/765536 files, 1047239/1536000 blocks
然后我们在新的/ dev / sda1
上创建日志,从而再次将其变成一个ext3分区:
tune2fs -j /dev/sda1
tune2fs 1.38 (30-Jun-2005)
Creating journal inode: done
This filesystem will be automatically checked every 30 mounts or
0 days, whichever comes first. Use tune2fs -c or -i to override.
现在我们完成了 关闭系统并启动进入原始系统 :
shutdown -r now
如果一切顺利,原始系统将启动,没有数据丢失。 现在我们可以收集关于我们新分区的一些细节,并将其与本章开始时收集的信息进行比较:
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 6047868 4224140 1639408 73% /
varrun 95480 132 95348 1% /var/run
varlock 95480 0 95480 0% /var/lock
udev 10240 52 10188 1% /dev
devshm 95480 0 95480 0% /dev/shm
lrm 95480 17580 77900 19% /lib/modules/2.6.17-10-generic/volatile
df -B 4k
Filesystem 4K-blocks Used Available Use% Mounted on
/dev/sda1 1511967 1056035 409852 73% /
varrun 23870 33 23837 1% /var/run
varlock 23870 0 23870 0% /var/lock
udev 2560 13 2547 1% /dev
devshm 23870 0 23870 0% /dev/shm
lrm 23870 4395 19475 19% /lib/modules/2.6.17-10-generic/volatile
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 5.8G 4.1G 1.6G 73% /
varrun 94M 132K 94M 1% /var/run
varlock 94M 0 94M 0% /var/lock
udev 10M 52K 10M 1% /dev
devshm 94M 0 94M 0% /dev/shm
lrm 94M 18M 77M 19% /lib/modules/2.6.17-10-generic/volatile
fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 789 6337611 83 Linux
/dev/sda2 1248 1305 465885 5 Extended
/dev/sda5 1248 1305 465853+ 82 Linux swap / Solaris
fdisk -s /dev/sda1
6337611