filesystem: add basic guided zfs
This commit is contained in:
parent
0022025e89
commit
13890db253
|
@ -157,6 +157,9 @@ class FilesystemManipulator:
|
|||
self.model.remove_logical_volume(lv)
|
||||
delete_lvm_partition = delete_logical_volume
|
||||
|
||||
def create_zpool(self, device, pool, mountpoint):
|
||||
self.model.add_zpool(device, pool, mountpoint)
|
||||
|
||||
def delete(self, obj):
|
||||
if obj is None:
|
||||
return
|
||||
|
|
|
@ -1854,3 +1854,22 @@ class FilesystemModel(object):
|
|||
if swap.mount():
|
||||
return False
|
||||
return True
|
||||
|
||||
def add_zpool(self, device, pool, mountpoint):
|
||||
fs_properties = dict(
|
||||
acltype='posixacl',
|
||||
relatime='on',
|
||||
canmount='on',
|
||||
compression='gzip',
|
||||
devices='off',
|
||||
xattr='sa',
|
||||
)
|
||||
zpool = ZPool(
|
||||
m=self,
|
||||
vdevs=[device],
|
||||
pool=pool,
|
||||
mountpoint=mountpoint,
|
||||
pool_properties=dict(ashift=12),
|
||||
fs_properties=fs_properties)
|
||||
self._actions.append(zpool)
|
||||
return zpool
|
||||
|
|
|
@ -473,6 +473,18 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
|
|||
mount="/",
|
||||
))
|
||||
|
||||
def guided_zfs(self, gap, choice: GuidedChoiceV2):
|
||||
device = gap.device
|
||||
part_align = device.alignment_data().part_align
|
||||
bootfs_size = align_up(sizes.get_bootfs_size(gap.size), part_align)
|
||||
gap_boot, gap_rest = gap.split(bootfs_size)
|
||||
|
||||
bpool_part = self.create_partition(device, gap_boot, dict(fstype=None))
|
||||
rpool_part = self.create_partition(device, gap_rest, dict(fstype=None))
|
||||
|
||||
self.create_zpool(rpool_part, 'rpool', '/')
|
||||
self.create_zpool(bpool_part, 'bpool', '/boot')
|
||||
|
||||
@functools.singledispatchmethod
|
||||
def start_guided(self, target: GuidedStorageTarget,
|
||||
disk: ModelDisk) -> gaps.Gap:
|
||||
|
@ -590,6 +602,8 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
|
|||
|
||||
if choice.capability.is_lvm():
|
||||
self.guided_lvm(gap, choice)
|
||||
elif choice.capability.is_zfs():
|
||||
self.guided_zfs(gap, choice)
|
||||
elif choice.capability == GuidedCapability.DIRECT:
|
||||
self.guided_direct(gap)
|
||||
else:
|
||||
|
|
|
@ -460,6 +460,41 @@ class TestGuided(IsolatedAsyncioTestCase):
|
|||
self.assertFalse(d1p2.preserve)
|
||||
self.assertIsNone(gaps.largest_gap(self.d1))
|
||||
|
||||
@parameterized.expand(boot_expectations)
|
||||
async def test_guided_zfs(self, bootloader, ptable, p1mnt):
|
||||
await self._guided_setup(bootloader, ptable)
|
||||
target = GuidedStorageTargetReformat(
|
||||
disk_id=self.d1.id, allowed=default_capabilities)
|
||||
await self.controller.guided(GuidedChoiceV2(
|
||||
target=target, capability=GuidedCapability.ZFS))
|
||||
[d1p1, d1p2, d1p3] = self.d1.partitions()
|
||||
self.assertEqual(p1mnt, d1p1.mount)
|
||||
self.assertEqual(None, d1p2.mount)
|
||||
self.assertEqual(None, d1p3.mount)
|
||||
self.assertFalse(d1p1.preserve)
|
||||
self.assertFalse(d1p2.preserve)
|
||||
self.assertFalse(d1p3.preserve)
|
||||
[rpool] = self.model._all(type='zpool', pool='rpool')
|
||||
self.assertEqual('/', rpool.mount)
|
||||
[bpool] = self.model._all(type='zpool', pool='bpool')
|
||||
self.assertEqual('/boot', bpool.mount)
|
||||
|
||||
async def test_guided_zfs_BIOS_MSDOS(self):
|
||||
await self._guided_setup(Bootloader.BIOS, 'msdos')
|
||||
target = GuidedStorageTargetReformat(
|
||||
disk_id=self.d1.id, allowed=default_capabilities)
|
||||
await self.controller.guided(GuidedChoiceV2(
|
||||
target=target, capability=GuidedCapability.ZFS))
|
||||
[d1p1, d1p2] = self.d1.partitions()
|
||||
self.assertEqual(None, d1p1.mount)
|
||||
self.assertEqual(None, d1p2.mount)
|
||||
self.assertFalse(d1p1.preserve)
|
||||
self.assertFalse(d1p2.preserve)
|
||||
[rpool] = self.model._all(type='zpool', pool='rpool')
|
||||
self.assertEqual('/', rpool.mount)
|
||||
[bpool] = self.model._all(type='zpool', pool='bpool')
|
||||
self.assertEqual('/boot', bpool.mount)
|
||||
|
||||
async def _guided_side_by_side(self, bl, ptable):
|
||||
await self._guided_setup(bl, ptable, storage_version=2)
|
||||
self.controller.add_boot_disk(self.d1)
|
||||
|
|
Loading…
Reference in New Issue