Total Pageviews

Thursday, December 27, 2012

Recovering a password on a ZFS '/' filesystem

Somehow the password file got clobbered on a workstation. I was pretty easy to recover a password file on a UFS filesystem, but it is a another thing if the root partition is ZFS. These are the step I took to recover the /etc/shadow file:

Recovering a root password on a zfs filesystem.

  1. Boot the machine into single user:
Ok> boot cdrom –s
  1. Find out what pools are available to import. In this case we are looking for rpool:
# zpool import
  1. Since rpool is available, we need to import it:
# zpool import rpool
The system returns with:
The system will report messages similar to this:

cannot mount '/export': failed to create mountpoint

cannot mount '/export/home': failed to create mountpoint

cannot mount '/rpool': failed to create mountpoint

Although the ZFS file systems in the pool cannot be mounted, they exist.

  1. zfs list will return what is mounted:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT

rpool 12.5G 54.4G 97K /rpool

rpool/ROOT 6.97G 54.4G 21K legacy

rpool/ROOT/s10s_u10wos_17b 6.97G 54.4G 6.97G /

rpool/dump 1.00G 54.4G 1.00G -

rpool/export 2.53G 54.4G 23.5K /export

rpool/export/home 2.53G 54.4G 2.53G /export/home

rpool/swap 2G 56.4G 16K –


  1. The mount point we are interested in is rpool/ROOT/s10s_u10wos_17b


# zfs get mountpoint rpool/ROOT/s10s_u10wos_17b

NAME PROPERTY VALUE SOURCE

rpool/ROOT/s10s_u10wos_17b mounted no -

  1. Change the mountpoint of rpool/ROOT/s10s_u10wos_17b
# zfs set mountpoint=/mnt rpool/ROOT/s10_u10wos_17b

  1. Mount rpool/ROOT/s10s_u10wos_17b

# zfs mount rpool/ROOT/s10s_u10wos_17b

  1. Change the password for root.
# cd /mnt/etc

What I did now was get rid of the 2nd field in both the /etc/passwd and /etc/shadow.

  1. Umount the filesystem or just reboot.

# cd /

# zfs umount rpool/ROOT/s10s_u10wos_17b

  1. Reset the mountpoint back to /.

# zfs set mountpoint=/ rpool/ROOT/s10_u10wos_17b


11. Reboot the system and you can log in to the system with root again.

#reboot


Recovering a mirrored disk drive

I reloaded a Solaris machine with the latest version of Solaris 10. Prior to reloaded it, I had two drive, one with '/' and '/usr' on it, and the other had two other partitions. The reload broke the first mirror, but I wanted to recover the mirrors on the 2nd drive. These are the steps I took.


bash-3.2# metastat
d31: Mirror
Submirror 0: d41
State: Needs maintenance
Submirror 1: d51
State: Needs maintenance
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 60516672 blocks (28 GB)

d41: Submirror of d31
State: Needs maintenance
Invoke: metasync d31
Size: 60516672 blocks (28 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t2d0s1 0 No Okay Yes


d51: Submirror of d31
State: Needs maintenance
Invoke: metasync d31
Size: 60516672 blocks (28 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t3d0s1 0 No Okay Yes


d5: Mirror
Submirror 0: d15
State: Needs maintenance
Submirror 1: d25
State: Needs maintenance
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 30721344 blocks (14 GB)

d15: Submirror of d5
State: Needs maintenance
Invoke: metareplace d5 c1t0d0s5
Size: 30721344 blocks (14 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s5 0 No Maintenance Yes


d25: Submirror of d5
State: Needs maintenance
Invoke: metasync d5
Size: 30721344 blocks (14 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s5 0 No Okay Yes


d4: Mirror
Submirror 0: d14
State: Needs maintenance
Submirror 1: d24
State: Needs maintenance
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 31840704 blocks (15 GB)

d14: Submirror of d4
State: Needs maintenance
Invoke: metareplace d4 c1t0d0s4
Size: 31840704 blocks (15 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s4 0 No Maintenance Yes


d24: Submirror of d4
State: Needs maintenance
Invoke: metasync d4
Size: 31840704 blocks (15 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s4 0 No Okay Yes


d1: Mirror
Submirror 0: d11
State: Needs maintenance
Submirror 1: d21
State: Needs maintenance
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 30721344 blocks (14 GB)

d11: Submirror of d1
State: Needs maintenance
Invoke: metareplace d1 c1t0d0s1
Size: 30721344 blocks (14 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s1 0 No Maintenance Yes


d21: Submirror of d1
State: Needs maintenance
Invoke: metasync d1
Size: 30721344 blocks (14 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s1 0 No Okay Yes


d0: Mirror
Submirror 0: d10
State: Needs maintenance
Submirror 1: d20
State: Needs maintenance
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 16393536 blocks (7.8 GB)

d10: Submirror of d0
State: Needs maintenance
Invoke: metasync d0
Size: 16393536 blocks (7.8 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s0 0 No Okay Yes


d20: Submirror of d0
State: Needs maintenance
Invoke: metasync d0
Size: 16393536 blocks (7.8 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s0 0 No Okay Yes


d30: Mirror
Submirror 0: d40
State: Needs maintenance
Submirror 1: d50
State: Needs maintenance
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 49160256 blocks (23 GB)

d40: Submirror of d30
State: Needs maintenance
Invoke: metasync d30
Size: 49160256 blocks (23 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t2d0s0 0 No Okay Yes


d50: Submirror of d30
State: Needs maintenance
Invoke: metasync d30
Size: 49160256 blocks (23 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t3d0s0 0 No Okay Yes


Device Relocation Information:
Device Reloc Device ID
c1t3d0 Yes id1,sd@n500000e016c7bfc0
c1t2d0 Yes id1,sd@n500000e016bed170
c1t1d0 Yes id1,sd@n5000c50005ed9edf
c1t0d0 Yes id1,sd@n500000e016beef40
bash-3.2#