如何调整ext3分区大小,而不丢失数据

如何在不丢失数据的情况下调整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),以及此救援系统必须具有以下工具: fdiskumountfscktune2fse2fsckresize2fs

如果要调整大小的分区不保存任何系统文件(例如/ 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
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏