実行時にextルートパーティションのサイズを変更するにはどうすればよいですか?


236

実行時にシステムのルートパーティションのサイズを増やすにはどうすればよいですか?

ルートパーティション(ext4でもあります)の後に割り当てられていないパーティションがあります。サーバーをシャットダウンせずに、その未割り当てのスペースをルートパーティションに割り当てられたスペースに追加するにはどうすればよいですか?


3
私は泥の中の棒のように聞こえるのは嫌いですが、これにはかなりのリスクが伴いますか?なぜこれが起こる必要があるのですか?稼働時間は主な制約ですか?
クラウド

パーティションは実際には移動するため、左側にサイズ変更することはできません。
ザズ

5
オンラインでext4パリティのサイズを増やすのは簡単です。難しい部分は縮小されます(見出しは「サイズ変更」についてです)。実行時にルートパーティション(移動、縮小、ファイルシステム、デバイスの変更)を操作することに興味がある場合は、回答を参照してください:askubuntu.com/a/728141/21888
vaab

回答:


214

GUI(Ubuntu 14.04以降):GParted v0.17以降は、これに適したGUIを提供します。(古いバージョンは、マウントされたパーティションのサイズ変更を拒否します)。

コマンドライン(すべてのUbuntuバージョン): これには3つのステップがあります。

手順1. 最初にパーティションのサイズを変更する必要があります。LVMを使用している場合、それは簡単であり、おそらくあなたは進む方法を知っているでしょう。クラシックパーティションを使用している場合は、もう少し複雑で、再起動必要になる場合があります(ただし、別のシステムやライブCDを起動する必要はありません)。

これは私がそれを行う方法です:fdisk最初にパーティションを削除するために使用し(アイデアはディスク上のデータが保持されるということです)、次に同じ位置でより大きなサイズで慎重に再作成します。

例:

$ sudo fdisk /dev/sda

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     9437183     4717568   83  Linux

Command (m for help): d
Selected partition 1

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    10485759     5241856   83  Linux

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 or after you run partprobe(8) or kpartx(8)
Syncing disks.

繰り返しますが、新しいパーティションは古いパーティションと同じブロックから開始することが重要です。Idも一致する必要があります(Linuxシステムの場合は83)。わずかな入力ミスですべてのデータを失う準備をしてください。

安全のために、を押してブートフラグを復元することもできます(Wikipediaによれば、一部のコンピューターではまだ必要です)a

スワップパーティションが邪魔になった場合の対処方法については、コメントセクションを参照してください。

今では人々がライブCDの使用を推奨する理由は明らかです。;-)

ステップ2は、 同様にfdisk親切にあなたが進む前に、パーティションテーブルをリロードする必要があり、あなたを思い出させます。最も安全な方法は、単に再起動することです。partprobeまたは、kpartx (詳細)を使用することもできます。

手順3. パーティションのサイズが変更され、パーティションテーブルが再resize2fs読み込みされると、ファイルシステムで実行するだけで済み、ルートパーティションとしてマウントされている場合でも実行できます。

例:

$ sudo resize2fs /dev/sda1

16
これは私にとって完璧に機能しました。ただし、保持されたブートフラグが元の状態であることを確認しました。
オーガスタスクリング

4
@ jbo5112:fdisk言うように、partprobeまたはkpartx再起動の代わりに動作する可能性があります。この質問もご覧ください。再起動しても、ダウンタイムに関してはライブCDを使用するよりも、仮想マシンの場合は単純な再起動で10秒未満になる可能性があります。また、オペレーターの時間も短縮されるため、通常、このアプローチを自分で使用します。:)
ソーレンLøvborg13年

1
@Raymond:メモリ負荷が許す場合(を参照free -h)、スワップを無効にし(swapoff /dev/sda2)、パーティションテーブルを変更し(スワップパーティションの削除と再作成を含む)、1)リブートまたは2)パーティションテーブルを再ロードしますswapon。(メモリが一時的にスワップを無効にするにはきつすぎるなら、あなたはまだ作成して有効にすることができ、新しいスワップパーティションを(/dev/sda3)、それからするswapoff sda2;しかし、その後は更新する必要があります/etc/fstab新しいスワップデバイス名で。)
セーレンLøvborg

1
vmwareを使用しており、ディスクのサイズを拡張している場合、sudo lshw -C diskを実行してファイルシステムを再スキャンし、vmがより大きなドライブを認識するようにする必要があります。その後、上記の指示に従ってください。
ガイ

2
縮小はどうですか?
アーロンフランケ

114

ルートパーティションであっても、ext4ファイルシステムのオンラインサイズ変更を行うことができます。resize2fsコマンドを使用します。

sudo resize2fs /dev/sda1

編集:オンラインでの縮小は許可されていません:

root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported

55
From man resize2fsThe resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8).この質問は、ファイルシステムではなく、パーティションのサイズ変更に関するものです。区別は微妙ですが、非常に重要です。
エリアケイガン

8
fdiskを使用してルートパーティションを削除し、同じ開始ブロックで再作成できます。fdiskは変更を書き出しますが、再起動後まで有効になりません。再起動後、resize2fsプログラムを使用してパーティションを埋めるためにディスクを送信できます。
ジェームズ・ベクワー

3
ext4ルートパーティションのサイズをオンラインで変更しました。したがって、それが可能であることを確認できます。ただし、/ dev / sda *をresize2fsのパラメーターとして渡す代わりに、論理ボリューム名を渡す必要があります。
CDR

10
私は、最初の段落見つけるresize2fsのは、manページ:最初の質問のための最も興味深いThe resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.).
MO」

5
あなたのためにこれを非常に簡単に行うfdisk時期growpartをいじってはいけません。
STRML

54

より簡単な解決策-使用growpart <device> <partition>

growpart /dev/xvda 1  # Grows the partition; note the space
resize2fs /dev/xvda1  # Grows the filesystem

いつものように、念のためパーティションテーブル(sfdisk -d /dev/xvda > partition_bak.dmp)をバックアップします。


縮小はどうですか?
アーロンフランケ

この方法を使用したいと考えていましたが、取得しましたsfdisk: /dev/nvme0n1p5: does not contain a recognized partition table(Windowsでデュアルブートを使用)
monkut

オンラインで縮小することはできません。使用gpartedすることをお勧めします。
STRML

4
growpartはcloud-utilsの一部です。インストールしていない場合は、apt-get install cloud-utils
-klor

1
@monkutパーティーに遅れましたが、ディスクはそう/dev/nvme0n1です。p5は、このディスクのパーティション5です。従来のBSDディスクスライスと比較すると、同様の番号付けスキームが使用されています。
ルンドバーグ

12

はい、再起動せずにオンラインルートパーティション縮小/移動/拡張できます(livecdもusbkeyもなし):この回答を参照してください。非常に長く、少し危険ですが、非常によく書かれており、簡単に理解できます。したがって、ext4パーティションのみを拡張する場合は、従来の実用的なresize2fsソリューションに固執することができます。

私が考えた一般的なソリューションは、たとえば、あらゆるタイプの専用またはVPSソリューションで機能します。

TLDR; この解決策は、ルートパーティションを安全にライブおよびいじることができるようにすることpivot_rootを意味します。完了したら、新しいルートパーティションに戻ります。tmpfsumountpivot_root

これにより、ルートファイルシステムでのほとんどの操作が可能になります(移動、ファイルシステムの変更、物理デバイスの変更など)。

再起動なしには、プロセスに必要とされない、これは制限をバイパスすることを可能にするresize2fs に収縮することができない ext4パーティションを。

私はこれを個人的に使用しましたが、debianシステムでも非常にうまく機能するため、Ubuntuでも機能するはずです。この詳細な解決策が、同じ問題を扱っているstackexchangeウェブサイトの多くの質問にもう少しリンクされていないことに私は非常に驚いています。

注:もちろん、パーティションを拡張したい場合resize2fsは、多くの場所や他の回答で説明されているように、単純なもので十分です。


4
ほとんどの人にとって、ルートパーティションにアクセスするすべてのプログラムとサービスを停止したら、マシンを再起動した可能性もあります。縮小/移動の場合は、ライブCDを使用するよりも速いかもしれませんが、成長の場合(最も一般的なタスクであり、OPが尋ねたもの)、ほとんどのシステムの一時的なシャットダウンを伴わない方法があります。
ソーレンLøvborg16年

2
@SørenLøvborg:完全な手順を実行しながら、継続的な生産を必要とするコアサービスを再起動できます。LiveCDを配置できない構成(VPSインスタンス、専用サーバーなど)や、特定の理由で再起動を避けたい状況が数多くあります。元の質問のタイトルには「サイズ変更」と書かれており、オンラインでパーティションの縮小を探している人々を引き付けます。**他のソリューションでは、ext4をオンラインで縮小することはできません。**このソリューションはリスクが高く、複雑ですが、最も強力であり、他のソリューションの欠点を補います。
vaab

1
外部リンクによっては回答を投稿しないでください。関連する部分を回答に入れるか、質問へのコメントとしてリンクを投稿してください。詳細については、回答方法をご覧ください。
メレビウス

10

GPartedを利用することもできます-サイズ変更するパーティションが起動したパーティションでない限り-それ以外の場合、初心者にはライブCDオプションの方がやや簡単だと思います。

GPartedは基本的にすべてのステップを実行します-GUIを前面に置いただけです。


Ubuntu 12.04 Live CDでシステムを起動し、GPartedでext4パーティションのサイズを変更しました。私にとってはうまくいきました。とにかく、この操作の前に、重要なデータをすべてバックアップしました。
StandDuPp

私は、gpartedはパーティションをアンマウントする必要があると思います。しかし、私は間違っている可能性があります。
ニック

問題は明らかに、ブート元のパーティションに関するものであり、ライブCDをブートするにはマシンを再起動する必要があります。-1
wjandrea

5

ルートがマウントされている間に、稼働中のシステムでext4ルートパーティションのサイズ変更を完了しました。

[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.

[root@habib i686]# 

5

@SørenLøvborgの答えを拡張したいと思います:存在するスワップパーティションでパーティションを拡張します。

最初に、拡張後のディスクのレイアウト:

$sudo parted /dev/sda 'unit s print' free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 14336000s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start      End        Size       Type      File system     Flags
        63s        2047s      1985s                Free Space
 1      2048s      10485759s  10483712s  primary   ext4            boot
        10485760s  10487805s  2046s                Free Space
 2      10487806s  12580863s  2093058s   extended
 5      10487808s  12580863s  2093056s   logical   linux-swap(v1)
        12580864s  14335999s  1755136s             Free Space

そのため、sda1はディスクの最後の空き領域で拡張する必要がありますが、スワップパーティションはそれらの間にあります。これはあなたがそれを行う方法です:

まず、スワップを無効にする必要があります。使用量と、オフにできるかどうかを確認してください。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           992M         52M        464M        3.2M        475M        784M
Swap:          1.0G          0B        1.0G

スワップはここでは使用されないため、オフにできます

$sudo swapoff /dev/sda5

次に、パーティションテーブルを変更します。

$sudo fdisk /dev/sda

(注:最初のパーティションが2048ではなくセクター63で始まる場合、オプションを追加する必要があります-c=dos

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/sda: 6.9 GiB, 7340032000 bytes, 14336000 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: 0x9e11c6df

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 10485759 10483712    5G 83 Linux
/dev/sda2       10487806 12580863  2093058 1022M  5 Extended
/dev/sda5       10487808 12580863  2093056 1022M 82 Linux swap / Solaris

Command (m for help): d
Partition number (1,2,5, default 5): 2

Partition 2 has been deleted.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-14335999, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-14335999, default 14335999): 12242941

Created a new partition 1 of type 'Linux' and of size 5.9 GiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (12242942-14335999, default 12242944):
Last sector, +sectors or +size{K,M,G,T,P} (12242944-14335999, default 14335999):

Created a new partition 2 of type 'Linux' and of size 1022 MiB.

Command (m for help): a
Partition number (1,2, default 2): 1

The bootable flag on partition 1 is enabled now.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

注:sda1のサイズは、セクターの合計量からスワップパーティションのセクターサイズを引いたものです:14335999-2093058 = 12242941

fdiskが言及しているように、カーネルはまだ古いパーティションテーブルを使用しているため、リロードする必要があります。

$partprobe

次に、sda1でresize2fsを実行する必要があります(これを忘れないでください!)

$resize2fs /dev/sda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 10
The filesystem on /dev/sda1 is now 38833617 (4k) blocks long.

今、物事はまだ終わっていません。お気づきのとおり、sda2はLinux(Ext4)タイプとしてパーティション分割されています。何らかの理由で、fdiskでタイプを選択する方法はありません。だから私たちはそれを使用してそれを交互にしなければなりませんcfdisk

$ sudo cfdisk

sda2を選択し、タイプをに変更し82 Linux swap / Solarisて、必ず書き込みます(確認するにはyesと入力します)

これでスワップを再度有効化できます

$mkswap /dev/sda2
/dev/sda2
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0

そして最後に有効にします:

$swapon /dev/sda2

行う必要があるのは、fstabを更新して、ブート時にスワップパーティションを自動的にマウントすることだけです。

$sudo nano /etc/fstab

そして、スワップパーティションのUUIDを上記の出力に変更します。

# swap was on /dev/sda5 during installation
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none            swap    sw              0       0

これですべてが正常になり、問題なく再起動できます。


スワップパーティションの種類を交互ためとして、それはFDISKで行うことができ、その後トンを選択する5(パーティション5)その後、82(Linuxのスワップ/ Solarisのタイプ)を購入
オズEDRI

パーティション2を拡張すべきではありませんか?(そして、fdiskでは、pではなくeを選択する必要があります)また、mkswapおよびswaponコマンドは、sda2ではなく/ dev / sda5で実行されるべきではありませんか?
オズエドリ

1
スワップパーティションタイプの場合:他の手順で、fdiskで実際にタイプを選択できるが、何らかの理由で私のバージョンでは機能しないことがわかりました。とにかく、それは常にcfdiskで動作します
wouter205

1
スワップパーティションの場合:拡張パーティションを使用できますが、拡張パーティションと論理パーティションの2つのパーティションを追加する必要があります(最初のパーティションレイアウトを参照)。私の例では、sda1-ext4-ルートパーティションとsda2-スワップパーティションの2つのプライマリパーティションになります。したがって、mkswapswaponコマンドはsda2で実行する必要があります。投稿の冒頭で間違いを犯しましたswapoff。sda5で実行する必要があります。コメントはいつでも歓迎します。書き留めるのは困難でした。
wouter205

1
スワップパーティションが暗号化されている場合、まずでcryptdisksを停止しcryptdisks_stop、次にの代わりに/ etc / crypttabを更新し、で/etc/fstabcryptdisksを再起動する必要がありcryptdisks_startます。
ドミトリ・チュバロフ

1

Ubuntu 16.04、4.4.0カーネルのparted 3.2を使用して、メインパーティションを、、または一時的に削除せずumountに正常にpivot_root実行しました。注意するために、ネットワークを無効にした仮想コンソールからすべてを行い、念のためスナップショットを事前に作成しましたが、スナップショットは必要ありませんでしたので、SSHを介してランレベルを変更せずにこれを行うことができました。

パーティションサイズを決定します。 parted /dev/sda1 print | egrep "Disk.*GB"

必要に応じて、ネットワークなしでマルチユーザーモードに切り替えます(SSHではなくコンソールから行う必要があります)。

runlevel     # remember the original runlevel
init 2

必要に応じて、VMスナップショットを作成して注意してください。

パーティションのサイズ変更:

parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q

ファイルシステムのサイズ変更: resize2fs /dev/sda1

問題が発生した場合は、ここでスナップショットを復元できます。すべてがうまくいった場合には、(上記で得られた)通常のランレベルに戻る-通常は5: init 5。この時点で完全な再起動を行って、すべてが正常に戻ることを確認することをお勧めします(後で日付/ ntpの問題が発生しました)。


1

次の手順を実行します。

  1. スーパーユーザーとして端末を開く su
  2. 走る parted
  3. 入力pして使用可能なパーティションを表示します
  4. ルートパーティション番号(例:「sda 3」は番号3を意味します)を特定し、使用rm PARTITION NUMBERして空き領域を作成することにより隣接するパーティションを削除します。
  5. resizepart ROOT NUMBER必要に応じてシステムを入力して再起動し、ルートサイズを増やします
  6. parted入力exitして端末タイプで終了し、partprobeEnter キーを押します(再起動後でも実行できます)
  7. 最後に実行resize2fs /dev/sda PARTITION NUMBERして、広々としたルートパーティションをお楽しみください。

0

前に述べたように:

  • ルートシステムからライブで拡張することが可能です(ブートセクションは移動しないため、問題はありません)

  • ライブブートパーティションの縮小は、外部ブートデバイスから実行する必要があります(ライブシステムcd / usb-stickからブート)。障害、ミスマッチ、システムのハングアップ、システムのハングアップ、再起動が必要で、最終的には起動しません正しく起動できます。

どんな種類の「でも私はそれをやったし、うまくいく」というのは純粋な運です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.