rootパスワードを忘れた時の対処

2010/02/12PC::Linux/BSD

rootパスワードを忘れた時の対処メモ。

環境

  • VMware Player 3.0.0
    • Debian GNU/Linux 5.0(lenny)/i386

手順

1. GRUBメニューで"E"を入力し、編集モードへ移行する。

deb-chrootpass1.jpg

2. kernel行にフォーカスを写し、さらに"E"を入力し、既存kernel行を編集する

deb-chrootpass2.jpg

3. "S init=/bin/sh"を追加する

deb-chrootpass3.jpg

この追加した部分の意味は以下の通り。

  • S: シングルユーザーモード(ランレベル1)で起動
  • init=/bin/sh: initプロセスの代わりに、/bin/sh(シェル)を直接起動する

編集が完了したら"Enter"を入力し、変更を反映させる。

4. "B"を入力し、変更したパラメータで起動させる。

deb-chrootpass4.jpg

5. rootでシェルに入ることができるようになっているので、passwdコマンドで新しいrootパスワードへ変更する。

以下の図では、ルートパーティションがrwとなっていることを確認するためにmountコマンドを実行しています。

deb-chrootpass5.jpg

このとき、キーボードが英語になっているので注意すること。

私は、簡単なパスワードで設定しておき、通常起動させた後(日本語キーボードして認識させた後)にパスワードを再度設定し直すことにしました。

パスワード変更後は再起動させればいいのですが、/sbin/shutdownを実行しても再起動できません。rebootコマンドで再起動することができます*1

*1 : あるいは、Ctrl+Alt+Deleteでも再起動できます

ファイルシステムが格納されたファイルを作ってみた

2010/02/02PC::Linux/BSD

mkswapコマンドで、スワップ領域として利用する元としてファイルが指定できる。
50MBのスワップとして利用できるファイルを作成し、利用する一連の動作を実際にやってみた。

スワップ領域として利用するファイルの作成

# dd if=/dev/zero of=/tmp/swp bs=1M count=50
50+0 記録始め
50+0 記録終わり
52428800 バイト (52 MB) コピー終了, 0.109074 s, 481 MB/s

ファイルをスワップ領域として利用できるようにする

# mkswap /tmp/swp
スワップ空間バージョン 1 を設定します、サイズ = 51196 KiB
no label, UUID=b1e1f86f-1d8b-4fbf-9015-3b7543cb6730

/tmp/swpをスワップ領域として利用する

# swapon /tmp/swp

現在のスワップ領域に関する情報を表示

# swapon -s
Filename                                Type            Size    Used    Priority
/dev/sda5                               partition       4200956 0       -1
/tmp/swp                                file            51192   0       -2

で、本題

スワップファイルだけではなく、同じようにファイルシステムもファイルの中に作れるのではないか?(仮想ディスクとして扱うことができるのではないか?)

やってみた

先ほどと同様にファイルシステムを作成するための空ファイルを作成します。

# dd if=/dev/zero of=/tmp/virtualdisk bs=1M count=100
100+0 記録始め                                                           
100+0 記録終わり                                                         
104857600 バイト (105 MB) コピー終了, 0.199313 s, 526 MB/s  

ext3ファイルシステムを作成します。

# mkfs.ext3 -b 4096 -c -m 0 /tmp/virtualdisk 
mke2fs 1.41.4 (27-Jan-2009)                                      
/tmp/virtualdisk is not a block special device.                  
Proceed anyway? (y,n) y                                          
Filesystem label=                                                
OS type: Linux                                                   
Block size=4096 (log=2)                                          
Fragment size=4096 (log=2)                                       
25600 inodes, 25600 blocks                                       
0 blocks (0.00%) reserved for the super user                     
First data block=0                                               
Maximum filesystem blocks=29360128                               
1 block group                                                    
32768 blocks per group, 32768 fragments per group                
25600 inodes per group                                           

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

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

途中でブロックスペシャルデバイスではないと言われていますが、作成することはできました。


マウントポイントを作り、マウントしてみます。

# mkdir /tmp/vdisk
# mount -t ext3 -o defaults,loop /tmp/virtualdisk /tmp/vdisk/

何事もなくマウントできました。すげー。

mountコマンドと、dfコマンドで現在のマウント状況を表示してみます。

# mount
中略
/dev/loop0 on /tmp/vdisk type ext3 (rw)
# df -h
ファイルシステム            サイズ  使用  残り 使用% マウント位置
中略
/dev/loop0             97M  4.1M   93M   5% /tmp/vdisk

この後実際に書き込んだりしてみましたが、問題なくファイルの作成とかもできてしまいました。Linuxすげー。