綾小路龍之介の素人思考

[linux] swapパーティションを/homeにマウント

パーティション分割の時に、それぞれのパーティションに必要と思われる量を予測して適当な用を割り当てるのだけれど、時間の経過とともにこの予測が間違っていたなぁと思う場合がある。僕の場合は/homeに8.2GB程度割り当てていたのだけれど、このマシンのユーザは僕だけでほとんどのデータはraidディスクに書き込んでいるために/homeの使用率が数%より増えたことが無い。また、swapパーティションは/homeと同じディスク上に2GBの単位で4つほど作っているので優先度の高いスワップパーティション以外はほとんど使われないという状態だ。このような場合に、最も優先度の低いswapパーティションをswapとしてではなく/homeとしてマウントして、/homeとしてマウントされていたディスク領域を別の用途に使ってみる。

まずはディスク使用量の確認とswapパーティションの状態チェックを行う。問題の/homeの使用率は3%(216MB)。/homeと同じディスク(/dev/hda)にある優先度の最も低いスワップパーティションは/dev/hda8で、ほとんど使用されていないことがわかる。そこで、/dev/hda8をスワップとして使用せずに、/homeをマウントする領域として使用することを考える。

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda2             259M  117M  129M  48% /
tmpfs                  62M     0   62M   0% /lib/init/rw
udev                   10M  120K  9.9M   2% /dev
tmpfs                  62M     0   62M   0% /dev/shm
/dev/hda12            8.2G  216M  7.6G   3% /home
/dev/hda11            373M   11M  343M   3% /tmp
/dev/hda9             4.6G  2.4G  2.1G  54% /usr
/dev/hda10            2.8G  284M  2.4G  11% /var
/dev/md0               17G   13G  2.7G  83% /home/hoge
# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/hda5                               partition       1959856 14388   9
/dev/hda6                               partition       1959888 0       2
/dev/hda7                               partition       1959888 0       1
/dev/hda8                               partition       1943824 0       0
/dev/hdb1                               partition       1959888 14428   9
/dev/hdd1                               partition       1953464 14424   9

初めに/dev/hda8のマウントを解除し、その確認。/dev/hda8がスワップ領域としてマウントされなくなった。

# swapoff /dev/hda8
# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/hda5                               partition       1959856 14396   9
/dev/hda6                               partition       1959888 0       2
/dev/hda7                               partition       1959888 0       1
/dev/hdb1                               partition       1959888 14432   9
/dev/hdd1                               partition       1953464 14428   9

ただしこのままでは再起動時に改めて/dev/hda8がスワップ領域としてマウントされてしまう。そのため、/etc/fstabの/dev/hda8のラインをコメントアウトしておく。

# grep swap /etc/fstab
/dev/hda5       none            swap    sw,pri=9        0       0
/dev/hda6       none            swap    sw,pri=2        0       0
/dev/hda7       none            swap    sw,pri=1        0       0
/dev/hda8       none            swap    sw,pri=0        0       0
/dev/hdb1       none            swap    sw,pri=9        0       0
/dev/hdd1       none            swap    sw,pri=9        0       0
# vi /etc/fstab
# grep swap /etc/fstab
/dev/hda5       none            swap    sw,pri=9        0       0
/dev/hda6       none            swap    sw,pri=2        0       0
/dev/hda7       none            swap    sw,pri=1        0       0
#/dev/hda8       none            swap    sw,pri=0        0       0
/dev/hdb1       none            swap    sw,pri=9        0       0
/dev/hdd1       none            swap    sw,pri=9        0       0
  1. swapon fstab - Google 検索
  2. Fedora JP 掲示板
  3. スワップ領域を有効化する「swapon」 - ubuntu日記
  4. swapon - システム管理コマンドの説明 - Linux コマンド集 一覧表
  5. Manpage of SWAPON

/dev/hda8を通常のext3パーティションとして使用するためには、パーティションタイプの変更と、ファイルシステムを構築が必要である。まずはパーティションタイプのチェックと変更。当然ながら、/dev/hda8はswapパーティションとしてタイプ付けされているのでこれをlinuxパーティションに変更する。再起動を促されるが再起動しない、その代わりにpartprobeしておく。fedora系のディストリビューションではpartprobeコマンドでカーネルに最新のパーティションテーブルを教えることが出来るので再起動の必要が無いそうだ。debian etch以降にはpartedパッケージ内にpartprobコマンドが含まれる。カーネルの領域テーブルを確認する方法を僕は知らないので、partprobが正しくカーネルの領域テーブルを書き換えたのかは不明。暇が出来たら再起動しておこう。

# fdisk -l /dev/hda

Disk /dev/hda: 25.5 GB, 25590620160 bytes
255 heads, 63 sectors/track, 3111 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x79564cf0

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        3077    24715971    5  Extended
/dev/hda2   *        3078        3111      273105   83  Linux
/dev/hda5               1         244     1959867   82  Linux swap / Solaris
/dev/hda6             245         488     1959898+  82  Linux swap / Solaris
/dev/hda7             489         732     1959898+  82  Linux swap / Solaris
/dev/hda8             733         974     1943833+  82  Linux swap / Solaris
/dev/hda9             975        1582     4883728+  83  Linux
/dev/hda10           1583        1947     2931831   83  Linux
/dev/hda11           1948        1996      393561   83  Linux
/dev/hda12           1997        3077     8683101   83  Linux
# fdisk /dev/hda

The number of cylinders for this disk is set to 3111.
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)

Command (m for help): p

Disk /dev/hda: 25.5 GB, 25590620160 bytes
255 heads, 63 sectors/track, 3111 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x79564cf0

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        3077    24715971    5  Extended
/dev/hda2   *        3078        3111      273105   83  Linux
/dev/hda5               1         244     1959867   82  Linux swap / Solaris
/dev/hda6             245         488     1959898+  82  Linux swap / Solaris
/dev/hda7             489         732     1959898+  82  Linux swap / Solaris
/dev/hda8             733         974     1943833+  82  Linux swap / Solaris
/dev/hda9             975        1582     4883728+  83  Linux
/dev/hda10           1583        1947     2931831   83  Linux
/dev/hda11           1948        1996      393561   83  Linux
/dev/hda12           1997        3077     8683101   83  Linux

Command (m for help): t
Partition number (1-12): 8
Hex code (type L to list codes): L

 0  Empty           1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot
 1  FAT12           24  NEC DOS         81  Minix / old Lin bf  Solaris
 2  XENIX root      39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 5  Extended        41  PPC PReP Boot   85  Linux extended  c7  Syrinx
 6  FAT16           42  SFS             86  NTFS volume set da  Non-FS data
 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility
 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt
 a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e1  DOS access
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          e4  SpeedStor
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  EFI GPT
10  OPUS            55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f4  SpeedStor
16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fd  Linux raid auto
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fe  LANstep
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid ff  BBT
1c  Hidden W95 FAT3 75  PC/IX
Hex code (type L to list codes): 83
Changed system type of partition 8 to 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.
Syncing disks.
# fdisk -l /dev/hda

Disk /dev/hda: 25.5 GB, 25590620160 bytes
255 heads, 63 sectors/track, 3111 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x79564cf0

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        3077    24715971    5  Extended
/dev/hda2   *        3078        3111      273105   83  Linux
/dev/hda5               1         244     1959867   82  Linux swap / Solaris
/dev/hda6             245         488     1959898+  82  Linux swap / Solaris
/dev/hda7             489         732     1959898+  82  Linux swap / Solaris
/dev/hda8             733         974     1943833+  83  Linux
/dev/hda9             975        1582     4883728+  83  Linux
/dev/hda10           1583        1947     2931831   83  Linux
/dev/hda11           1948        1996      393561   83  Linux
/dev/hda12           1997        3077     8683101   83  Linux
# aptitude -R install parted
# partprobe
  1. linux fdisk - Google 検索
  2. Manpage of FDISK
  3. fdiskの操作方法
  4. システム管理/fdiskを使う - Vine Linuxワークステーション
  5. linux fdisk 再起動 - Google 検索
  6. fdiskコマンドで領域テーブルの再読み込みに失敗したら - @IT
  7. Debian -- パッケージのファイル一覧: parted/lenny/i386

パーティションタイプの変更と領域テーブルの再読み込みが終わったらファイルシステムを作成する。このときついでに不良ブロックのテスト(-c)もしておく。

debian:~# mkfs.ext3 -c /dev/hda8
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
121680 inodes, 485958 blocks
24297 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=499122176
15 block groups
32768 blocks per group, 32768 fragments per group
8112 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Checking for bad blocks (read-only test): done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
  1. Manpage of MKFS
  2. linux home 移動 - Google 検索
  3. パーティションの活用: /home の移動編
  4. ITmedia エンタープライズ : Linux Tips「「/home/」などのディレクトリを,ほかのドライブ(パーティション)に移動したい」

で、シャットダウン。シングルユーザモードで起動。

# shutdown -h now

/dev/hda8を/homeとしてマウントするようにfstabを書き換え。

# vi /etc/fstab
# grep -e 'hda12' -e 'hda8' /etc/fstab
#/dev/hda12      /home           ext3    defaults        0       2
/dev/hda8       /home           ext3    defaults        0       2
#/dev/hda8       none            swap    sw,pri=0        0       0

さらに再起動。再起動の後に正しくマウントされているかどうかのチェック。

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/hda5                               partition       1959856 0       9
/dev/hda6                               partition       1959888 0       2
/dev/hda7                               partition       1959888 0       1
/dev/hdb1                               partition       1959888 0       9
/dev/hdd1                               partition       1953464 0       9
$ df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/hda2             259M  117M  129M  48% /
tmpfs                  62M     0   62M   0% /lib/init/rw
udev                   10M  120K  9.9M   2% /dev
tmpfs                  62M     0   62M   0% /dev/shm
/dev/hda8             1.9G  104M  1.7G   6% /home
/dev/hda11            373M   11M  343M   3% /tmp
/dev/hda9             4.6G  2.4G  2.1G  54% /usr
/dev/hda10            2.8G  285M  2.4G  11% /var
/dev/md0               17G   14G  2.1G  88% /home/hoge

確かに2GBの領域が/homeとしてマウントされ、これまであった/dev/hda8のスワップパーティションはなくなっている。これで完了。

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-03-05T09:36:17+09:00
  2. Modified: 2009-03-05T21:35:40+09:00
  3. Generated: 2017-08-20T23:09:20+09:00