web-dev-qa-db-ja.com

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

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

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

230
BonboBingo

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

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

ステップ1.最初にパーティションのサイズを変更する必要があります。 LVMを使用している場合、それは簡単で、おそらくあなたはどのように進むべきか知っているでしょう。クラシックパーティションを使用している場合は、もう少し複雑です。mayには再起動が必要です(ただし、別のシステムやライブ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)。わずかな入力ミスですべてのデータを失う準備をしてください。

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

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

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

ステップ2.fdiskを参考にすると、続行する前にパーティションテーブルをリロードする必要があります。最も安全な方法は、単に再起動することです。ただし、partprobeまたはkpartx(詳細) も使用できます。

ステップ3.パーティションのサイズが変更され、パーティションテーブルがリロードされると、ファイルシステムでresize2fsを実行するだけで済み、マウントされていても実行できますルートパーティションとして。

例:

$ Sudo resize2fs /dev/sda1
207
Søren Løvborg

ルートパーティションであっても、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
114
CodeAddict

より簡単な解決策-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)をバックアップします。

50
STRML

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

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

TLDR;この解決策は、pivot_roottmpfsにすることを意味するため、ルートパーティションを安全にumount生きたままいじることができます。完了したら、pivot_rootを新しいルートパーティションに戻します。

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

プロセスで再起動は必要ありません。これは制限のバイパスを許可 of resize2fs縮小できませんext4パーティションです。

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

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

12
vaab

また、GPartedを使用することもできます-サイズ変更するパーティションが起動元のパーティションでない限り-live CDオプションは初心者にはやや簡単です。

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

10
leatherjacket

@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

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

5
wouter205

ルートがマウントされている間に、稼働中のシステムで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
CDR

Ubuntu 16.04、4.4.0カーネルのparted 3.2を使用して、umountpivot_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
Roger Dueck

次の手順を実行します。

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

前に述べたように:

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

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

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

0
ascervera