mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 07:26:29 +00:00
Looks like we may or may not need to create those uuid links by ourselves. This patch also adds a verification to not create/delete the link if it already exists or not, respectively.
This commit is contained in:
parent
940a089933
commit
22760c76db
1 changed files with 31 additions and 0 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
import os
|
||||||
from abstract import AbstractPartition
|
from abstract import AbstractPartition
|
||||||
from bootstrapvz.common.sectors import Sectors
|
from bootstrapvz.common.sectors import Sectors
|
||||||
|
|
||||||
|
@ -31,6 +32,8 @@ class BasePartition(AbstractPartition):
|
||||||
self.previous = previous
|
self.previous = previous
|
||||||
# List of flags that parted should put on the partition
|
# List of flags that parted should put on the partition
|
||||||
self.flags = []
|
self.flags = []
|
||||||
|
# Path to symlink in /dev/disk/by-uuid (manually maintained by this class)
|
||||||
|
self.disk_by_uuid_path = None
|
||||||
super(BasePartition, self).__init__(size, filesystem, format_command)
|
super(BasePartition, self).__init__(size, filesystem, format_command)
|
||||||
|
|
||||||
def create(self, volume):
|
def create(self, volume):
|
||||||
|
@ -71,6 +74,25 @@ class BasePartition(AbstractPartition):
|
||||||
"""
|
"""
|
||||||
self.fsm.map(device_path=device_path)
|
self.fsm.map(device_path=device_path)
|
||||||
|
|
||||||
|
def link_uuid(self):
|
||||||
|
# /lib/udev/rules.d/60-kpartx.rules does not create symlinks in /dev/disk/by-{uuid,label}
|
||||||
|
# This patch would fix that: http://www.redhat.com/archives/dm-devel/2013-July/msg00080.html
|
||||||
|
# For now we just do the uuid part ourselves.
|
||||||
|
# This is mainly to fix a problem in update-grub where /etc/grub.d/10_linux
|
||||||
|
# checks if the $GRUB_DEVICE_UUID exists in /dev/disk/by-uuid and falls
|
||||||
|
# back to $GRUB_DEVICE if it doesn't.
|
||||||
|
# $GRUB_DEVICE is /dev/mapper/xvd{f,g...}# (on ec2), opposed to /dev/xvda# when booting.
|
||||||
|
# Creating the symlink ensures that grub consistently uses
|
||||||
|
# $GRUB_DEVICE_UUID when creating /boot/grub/grub.cfg
|
||||||
|
self.disk_by_uuid_path = os.path.join('/dev/disk/by-uuid', self.get_uuid())
|
||||||
|
if not os.path.exists(self.disk_by_uuid_path):
|
||||||
|
os.symlink(self.device_path, self.disk_by_uuid_path)
|
||||||
|
|
||||||
|
def unlink_uuid(self):
|
||||||
|
if os.path.isfile(self.disk_by_uuid_path):
|
||||||
|
os.remove(self.disk_by_uuid_path)
|
||||||
|
self.disk_by_uuid_path = None
|
||||||
|
|
||||||
def _before_create(self, e):
|
def _before_create(self, e):
|
||||||
"""Creates the partition
|
"""Creates the partition
|
||||||
"""
|
"""
|
||||||
|
@ -92,7 +114,16 @@ class BasePartition(AbstractPartition):
|
||||||
def _before_map(self, e):
|
def _before_map(self, e):
|
||||||
# Set the device path
|
# Set the device path
|
||||||
self.device_path = e.device_path
|
self.device_path = e.device_path
|
||||||
|
if e.src == 'unmapped_fmt':
|
||||||
|
# Only link the uuid if the partition is formatted
|
||||||
|
self.link_uuid()
|
||||||
|
|
||||||
|
def _after_format(self, e):
|
||||||
|
# We do this after formatting because there otherwise would be no UUID
|
||||||
|
self.link_uuid()
|
||||||
|
|
||||||
def _before_unmap(self, e):
|
def _before_unmap(self, e):
|
||||||
# When unmapped, the device_path information becomes invalid, so we delete it
|
# When unmapped, the device_path information becomes invalid, so we delete it
|
||||||
self.device_path = None
|
self.device_path = None
|
||||||
|
if e.src == 'formatted':
|
||||||
|
self.unlink_uuid()
|
||||||
|
|
Loading…
Add table
Reference in a new issue