Root Remount (reroot) ze ZFS na jine ZFS [SOLVED]
Marián Černý
majo-users-l at cerny.sk
Fri Jun 14 21:20:13 CEST 2019
Dan Lukes wrote:
> Zrejme mi unika duvod, proc trvas na importu. Ano, tim vznika potiz - bez predchoziho exportu import mozny neni.
Kdyz chces namontovat dataset (file system) z poolu, tak musi byt pool importovany.
Kdyz se bootuje ze ZFS, tak se myslim ten pool importuje implicitne a myslim, ze dokonce i kdyz byl pouzivan na jinem pocitaci a nebyl exportovany. Ale nejsem si uplne jisty.
>> Ted ale kdyz se divam do /etc/rc.d/zfs, tak ten dela `zfs mount -va`, takze by melo stacit udelat rc.skript, ktery se pusti pred tim zfs a ktery ten base pool exportuje
>
> Kdyz to jde dolu. A kdyz to jde nahodu, tak zase naimportuje. Nebo ne ?
Ne. Kdyz to jde dolu tak to exportovat nemuzu, kdyz je jeste namontovany root. A ten se odmontuje az po tech shutdown skriptech.
Kdyz to jde nahoru, tak jsou oba pooly v case spusteni /etc/rc.d/zfs importovane. Tak jsem to myslel tak, ze pred /etc/rc.d/zfs ten base pool exportuju (a `zfs mount -va` ty filesystemy/datasety nenamontuje).
>> Az se k tomu zase dostanu, tak to vyzkousim.
>
> Na to ti staci rc.d script s
>
> # REQUIRE: zfsbe
> # BEFORE: zfs
Diky za tip. Dal jsem to takto a funguje to bez problemu.
/etc/rc.d/majo-export-base
#!/bin/sh
#
# Based on /etc/rc.d/local
#
# PROVIDE: majo-export-base
# REQUIRE: zfsbe
# BEFORE: zfs
. /etc/rc.subr
name="local"
desc="Export base ZFS pool after reroot"
start_cmd="local_start"
stop_cmd="local_stop"
local_start()
{
echo 'Majo base:'
zpool export base
}
local_stop()
{
}
load_rc_config $name
run_rc_command "$1"
>> Nejvic by se mi hodilo, kdyby po rerootu si ten novy system z pohledu ZFS myslel, ze je “jiny pocitac”.
>
> To by ti ale preci nepomohlo. Ten zpool by nebyl exportovany, nebyl by ani na tom novem pocitaci naimportovany, takze bys byl v situaci kterou nelze vyresit "normalne", nutne jsou recovery postupy. To mi moc jako "by se hodilo" stav nepripada.
No prave pred rerootem ho pouzival host s ID A a neexportoval ho… po rerootu je to host s ID B… a protoze neni exportovany a posledne ho pouzival host s ID A, tak si ho host s ID B nebude vsimat. Teda to jsem ocekaval.
Jenze host B po rerootu ma naimportovane oba pooly. “Svuj” private pool implicitne, protoze z neho bootuje. A ten “cizi” base asi proto, ze to “zustane v kernelu” u toho rerootu.
Vypada to tak, ze ZFS skutecne pouziva nakonfigurovane kern.hostid. Usuzuji to z teto hlasky:
# zpool import -R /mnt private
cannot import 'private': pool may be in use from other system, it was last accessed by shockwave (hostid: 0xcedff5b7) on Mon Jun 10 14:17:07 2019
Pritom hostid odpovida tomu ktere se vypisuje na konzoli pri bootu.
Zjistit to posledni hostid u ZFS poolu lze pomoci zdb -eC private (http://wiki.lustre.org/Examining_ZFS_Pools_with_zdb).
Zaver asi je, ze u rerootu zustavaji zarizeni (prenasi se devfs), takze i zfs zarizeni a tedy i ten zfs pool zustane po rerootu importovany, i kdyz by se normalne neimportoval, protoze hostid je jine.
> Nemuzu si pomoct, ale v souvislosti se ZFS se mi neodbytne vybavuje Murphyho:
>
>> Počítač je zařízení sloužící k řešení problémů, které by bez něj vůbec nevznikly.
njn.
Marian
More information about the Users-l
mailing list