Revision ae26a287
b/lib/bdev.py | ||
---|---|---|
1017 | 1017 |
self.minor = minor |
1018 | 1018 |
self.dev_path = self._DevPath(minor) |
1019 | 1019 |
|
1020 |
@staticmethod |
|
1021 |
def _CheckMetaSize(meta_device): |
|
1022 |
"""Check if the given meta device looks like a valid one. |
|
1023 |
|
|
1024 |
This currently only check the size, which must be around |
|
1025 |
128MiB. |
|
1026 |
|
|
1027 |
""" |
|
1028 |
result = utils.RunCmd(["blockdev", "--getsize", meta_device]) |
|
1029 |
if result.failed: |
|
1030 |
logger.Error("Failed to get device size: %s" % result.fail_reason) |
|
1031 |
return False |
|
1032 |
try: |
|
1033 |
sectors = int(result.stdout) |
|
1034 |
except ValueError: |
|
1035 |
logger.Error("Invalid output from blockdev: '%s'" % result.stdout) |
|
1036 |
return False |
|
1037 |
bytes = sectors * 512 |
|
1038 |
if bytes < 128 * 1024 * 1024: # less than 128MiB |
|
1039 |
logger.Error("Meta device too small (%.2fMib)" % (bytes / 1024 / 1024)) |
|
1040 |
return False |
|
1041 |
if bytes > (128 + 32) * 1024 * 1024: # account for an extra (big) PE on LVM |
|
1042 |
logger.Error("Meta device too big (%.2fMiB)" % (bytes / 1024 / 1024)) |
|
1043 |
return False |
|
1044 |
return True |
|
1045 |
|
|
1020 | 1046 |
|
1021 | 1047 |
class DRBDev(BaseDRBD): |
1022 | 1048 |
"""DRBD block device. |
... | ... | |
1168 | 1194 |
return retval |
1169 | 1195 |
|
1170 | 1196 |
|
1171 |
@staticmethod |
|
1172 |
def _IsValidMeta(meta_device): |
|
1173 |
"""Check if the given meta device looks like a valid one. |
|
1174 |
|
|
1175 |
This currently only check the size, which must be around |
|
1176 |
128MiB. |
|
1177 |
|
|
1178 |
""" |
|
1179 |
result = utils.RunCmd(["blockdev", "--getsize", meta_device]) |
|
1180 |
if result.failed: |
|
1181 |
logger.Error("Failed to get device size: %s" % result.fail_reason) |
|
1182 |
return False |
|
1183 |
try: |
|
1184 |
sectors = int(result.stdout) |
|
1185 |
except ValueError: |
|
1186 |
logger.Error("Invalid output from blockdev: '%s'" % result.stdout) |
|
1187 |
return False |
|
1188 |
bytes = sectors * 512 |
|
1189 |
if bytes < 128*1024*1024: # less than 128MiB |
|
1190 |
logger.Error("Meta device too small (%.2fMib)" % (bytes/1024/1024)) |
|
1191 |
return False |
|
1192 |
if bytes > (128+32)*1024*1024: # account for an extra (big) PE on LVM |
|
1193 |
logger.Error("Meta device too big (%.2fMiB)" % (bytes/1024/1024)) |
|
1194 |
return False |
|
1195 |
return True |
|
1196 |
|
|
1197 |
|
|
1198 | 1197 |
@classmethod |
1199 | 1198 |
def _AssembleLocal(cls, minor, backend, meta): |
1200 | 1199 |
"""Configure the local part of a DRBD device. |
... | ... | |
1203 | 1202 |
device. And it must be done only once. |
1204 | 1203 |
|
1205 | 1204 |
""" |
1206 |
if not cls._IsValidMeta(meta):
|
|
1205 |
if not cls._CheckMetaSize(meta):
|
|
1207 | 1206 |
return False |
1208 | 1207 |
result = utils.RunCmd(["drbdsetup", cls._DevPath(minor), "disk", |
1209 | 1208 |
backend, meta, "0", "-e", "detach"]) |
... | ... | |
1536 | 1535 |
meta.Assemble() |
1537 | 1536 |
if not meta.Attach(): |
1538 | 1537 |
raise errors.BlockDeviceError("Can't attach to meta device") |
1539 |
if not cls._IsValidMeta(meta.dev_path):
|
|
1538 |
if not cls._CheckMetaSize(meta.dev_path):
|
|
1540 | 1539 |
raise errors.BlockDeviceError("Invalid meta device") |
1541 | 1540 |
logger.Info("Started zeroing device %s" % meta.dev_path) |
1542 | 1541 |
cls._ZeroDevice(meta.dev_path) |
Also available in: Unified diff