devmapper: store base device fs type
After the very first init of the graph `docker info` correctly shows the base fs type under `Backing Filesystem`. This information isn't stored anywhere. After a restart (w/o erasing `/var/lib/docker`) `docker info` shows an empty string under `Backing Filesystem`. This patch records the base fs type after the first run in the metadata or, to fix old devices that don't have this info in the metadata, just probe the fs type of the base device at graph startup. Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
parent
6c0c199103
commit
f22ee02c6d
1 changed files with 27 additions and 16 deletions
|
@ -114,8 +114,9 @@ type DeviceSet struct {
|
|||
overrideUdevSyncCheck bool
|
||||
deferredRemove bool // use deferred removal
|
||||
deferredDelete bool // use deferred deletion
|
||||
BaseDeviceUUID string //save UUID of base device
|
||||
nrDeletedDevices uint //number of deleted devices
|
||||
BaseDeviceUUID string // save UUID of base device
|
||||
BaseDeviceFilesystem string // save filesystem of base device
|
||||
nrDeletedDevices uint // number of deleted devices
|
||||
deletionWorkerTicker *time.Ticker
|
||||
uidMaps []idtools.IDMap
|
||||
gidMaps []idtools.IDMap
|
||||
|
@ -587,6 +588,9 @@ func (devices *DeviceSet) createFilesystem(info *devInfo) (err error) {
|
|||
if devices.filesystem == "" {
|
||||
devices.filesystem = determineDefaultFS()
|
||||
}
|
||||
if err := devices.saveBaseDeviceFilesystem(devices.filesystem); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
logrus.Infof("devmapper: Creating filesystem %s on device %s", devices.filesystem, info.Name())
|
||||
defer func() {
|
||||
|
@ -894,7 +898,7 @@ func (devices *DeviceSet) getBaseDeviceSize() uint64 {
|
|||
}
|
||||
|
||||
func (devices *DeviceSet) getBaseDeviceFS() string {
|
||||
return devices.filesystem
|
||||
return devices.BaseDeviceFilesystem
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) verifyBaseDeviceUUIDFS(baseInfo *devInfo) error {
|
||||
|
@ -904,7 +908,6 @@ func (devices *DeviceSet) verifyBaseDeviceUUIDFS(baseInfo *devInfo) error {
|
|||
if err := devices.activateDeviceIfNeeded(baseInfo, false); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer devices.deactivateDevice(baseInfo)
|
||||
|
||||
uuid, err := getDeviceUUID(baseInfo.DevName())
|
||||
|
@ -916,23 +919,31 @@ func (devices *DeviceSet) verifyBaseDeviceUUIDFS(baseInfo *devInfo) error {
|
|||
return fmt.Errorf("devmapper: Current Base Device UUID:%s does not match with stored UUID:%s. Possibly using a different thin pool than last invocation", uuid, devices.BaseDeviceUUID)
|
||||
}
|
||||
|
||||
// If user specified a filesystem using dm.fs option and current
|
||||
// file system of base image is not same, warn user that dm.fs
|
||||
// will be ignored.
|
||||
if devices.filesystem != "" {
|
||||
fs, err := ProbeFsType(baseInfo.DevName())
|
||||
if devices.BaseDeviceFilesystem == "" {
|
||||
fsType, err := ProbeFsType(baseInfo.DevName())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if fs != devices.filesystem {
|
||||
logrus.Warnf("devmapper: Base device already exists and has filesystem %s on it. User specified filesystem %s will be ignored.", fs, devices.filesystem)
|
||||
devices.filesystem = fs
|
||||
if err := devices.saveBaseDeviceFilesystem(fsType); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// If user specified a filesystem using dm.fs option and current
|
||||
// file system of base image is not same, warn user that dm.fs
|
||||
// will be ignored.
|
||||
if devices.BaseDeviceFilesystem != devices.filesystem {
|
||||
logrus.Warnf("devmapper: Base device already exists and has filesystem %s on it. User specified filesystem %s will be ignored.", devices.BaseDeviceFilesystem, devices.filesystem)
|
||||
devices.filesystem = devices.BaseDeviceFilesystem
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) saveBaseDeviceFilesystem(fs string) error {
|
||||
devices.BaseDeviceFilesystem = fs
|
||||
return devices.saveDeviceSetMetaData()
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) saveBaseDeviceUUID(baseInfo *devInfo) error {
|
||||
devices.Lock()
|
||||
defer devices.Unlock()
|
||||
|
@ -940,7 +951,6 @@ func (devices *DeviceSet) saveBaseDeviceUUID(baseInfo *devInfo) error {
|
|||
if err := devices.activateDeviceIfNeeded(baseInfo, false); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer devices.deactivateDevice(baseInfo)
|
||||
|
||||
uuid, err := getDeviceUUID(baseInfo.DevName())
|
||||
|
@ -949,8 +959,7 @@ func (devices *DeviceSet) saveBaseDeviceUUID(baseInfo *devInfo) error {
|
|||
}
|
||||
|
||||
devices.BaseDeviceUUID = uuid
|
||||
devices.saveDeviceSetMetaData()
|
||||
return nil
|
||||
return devices.saveDeviceSetMetaData()
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) createBaseImage() error {
|
||||
|
@ -1058,10 +1067,12 @@ func (devices *DeviceSet) setupBaseImage() error {
|
|||
if err := devices.setupVerifyBaseImageUUIDFS(oldInfo); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if devices.baseFsSize != defaultBaseFsSize && devices.baseFsSize != devices.getBaseDeviceSize() {
|
||||
logrus.Warnf("devmapper: Base device is already initialized to size %s, new value of base device size %s will not take effect",
|
||||
units.HumanSize(float64(devices.getBaseDeviceSize())), units.HumanSize(float64(devices.baseFsSize)))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue