ただのメモ。
自宅の Solaris 11 (snv_151a) の zvol を target として iMac の globalSAN の iSCSI initiator から使っていたディスクが、volsize を変えたら「パーティションが壊れている」と言われる用になってしまった件が解決した。
zpool の構成を変えてテストしようと思い、zvol を zfs send でいったん別のディスクに退避させたい。実際に書き込んだデータのサイズに対して zvol 自体がすごい容量になっていたので、 volsize いじって小さくしようとしました。ところが、 initiator 側ではこの LU に HFS+ を書いていたので、 zfs と違って容量の変化なんて理解できないのでした。
状況
- さいしょ
% sudo zfs create -V 1T tank/test % sudo stmfadm create-lu /dev/zvol/rdsk/tank/test
- volsize いじって退避 (書き込んだデータは 100G もない)
% sudo zfs set volsize=100G tank/test % sudo zfs set refreservations=100G tank/test % sudo zfs snapshot tank/test@aho % sudo zfs send tank/test@aho > どっか
- tank を作りなおして書き戻す
% sudo zfs receive -v -d tank < どっか % sudo stmfadm create-lu /dev/zvol/rdsk/tank/test
ところが mac が認識できないよ、消すか eject するかどうする? みたく聞いてくるんですね。
対処法
で、どうすればいいのかというと、単に volsize を戻すだけです。
% sudo zfs set volsize=1T tank/test
メモとしては以下。
- 違いよくわかってないけど、lu を戻すときは stmfadm create-lu で新規作成っぽいのじゃなくて import-lu しておくと気持ち安心かも
- そもそもろくに考えずに大きな zvol つくるんなら zfs create -s -V 1T しておけ
- ちなみに Mac からフォーマットすると GPT になってるように見えるが、 GNU Parted 2.3 で適当に print したらこけました。
- parted が悪いのかどうかは調べてないです。
ichii386@elmo-debian% sudo parted /dev/sdb GNU Parted 2.3 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Error: The backup GPT table is corrupt, but the primary appears OK, so that will be used. OK/Cancel? o Warning: Not all of the space available to /dev/sdb appears to be used, you can fix the GPT to use all of the space (an extra 1098907648 blocks) or continue with the current setting? Fix/Ignore? i Backtrace has 12 calls on stack: 12: /lib/libparted.so.0(ped_assert+0x31) [0x7f92e3e50351] 11: /lib/libparted.so.0(ped_geometry_read+0x80) [0x7f92e3e57d70] 10: /lib/libparted.so.0(hfsplus_probe+0x247) [0x7f92e3e6eb47] 9: /lib/libparted.so.0(ped_file_system_probe_specific+0x5c) [0x7f92e3e5192c] 8: /lib/libparted.so.0(ped_file_system_probe+0xab) [0x7f92e3e51edb] 7: /lib/libparted.so.0(+0x442cf) [0x7f92e3e812cf] 6: /lib/libparted.so.0(ped_disk_new+0x75) [0x7f92e3e57505] 5: parted() [0x4070de] 4: parted(interactive_mode+0xf3) [0x40e183] 3: parted(main+0x8f) [0x40b1df] 2: /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd) [0x7f92e364bead] 1: parted() [0x405709]