古い be (Boot Environment) を削除するいくつかのパターン。
環境は Oracle Solaris 11.1。
1. beadm destroy
基本的な方法で、man beadm にあるように、
beadm destroy beName
すればよい。
2. BE が zfs clone の元になっている場合
削除したい BE が zfs clone の元になっている場合、
依存している BE (ZFS?) が存在するため、
beadm destroy で削除できない
(なんて言われるかメモしていなかったので、あとで確認する)。
この場合、zfs promote で現在起動している BE にでも clone 元を移行すればよい。
zfs promote clone-filesystem
なので、現在起動している BE が solaris-2 という名前だったら、
zfs promte rpool/ROOT/solaris-2
とすればよい。
rpool/ROOT/solaris-2 以下があれば、それに対しても zfs promote を実行する。
これで、zfs clone 元が現在起動している BE に移るので、
それ以外の BE は削除できるはず
(BE の zfs clone の関係がこれ以外のパターンがあるか未確認)。
3. Active が !R となっている Zone の BE を削除する
Oracle Solaris に SRU をあて、古い BE を削除していくと、
Zone の BE が以下のような状態になる。
$ beadm list BE Active Mountpoint Space Policy Created -- ------ ---------- ----- ------ ------- solaris-1 !R - 190.92M static 2012-11-22 12:10 solaris-2 NR / 15.27G static 2012-12-22 13:13
この solaris-1 を削除しようとすると以下のようになり、削除できない。
% sudo beadm destroy solaris-1 Are you sure you want to destroy solaris-1? This action cannot be undone(y/[n]): y be_destroy: Operation not supported on active unbootable BE Unable to destroy solaris-1. Operation not supported for zone BE
この場合、正しい方法かはわからないが、
zfs destroy -r rpool/ROOT/solaris-1
すると、beadm list の一覧から消える。