fix
This commit is contained in:
@@ -683,49 +683,53 @@ class MainWindow(QMainWindow):
|
||||
self.refresh_all_info()
|
||||
|
||||
def _handle_create_lv(self):
|
||||
lvm_info = self.system_manager.get_lvm_info()
|
||||
available_vgs = []
|
||||
vg_sizes = {}
|
||||
for vg in lvm_info.get('vgs', []):
|
||||
vg_name = vg.get('vg_name')
|
||||
if vg_name and vg_name != 'N/A':
|
||||
available_vgs.append(vg_name)
|
||||
lvm_info = self.system_manager.get_lvm_info()
|
||||
available_vgs = []
|
||||
vg_sizes = {}
|
||||
for vg in lvm_info.get('vgs', []):
|
||||
vg_name = vg.get('vg_name')
|
||||
if vg_name and vg_name != 'N/A':
|
||||
available_vgs.append(vg_name)
|
||||
|
||||
free_size_str = vg.get('vg_free', '0B').strip()
|
||||
current_vg_size_gb = 0.0
|
||||
# 将字符串转换为小写并去除可能存在的 '<' 符号,以便更准确地匹配
|
||||
free_size_str = vg.get('vg_free', '0B').strip().lower()
|
||||
current_vg_size_gb = 0.0
|
||||
|
||||
match = re.match(r'(\d+\.?\d*)\s*([gmktb])?', free_size_str, re.IGNORECASE)
|
||||
if match:
|
||||
value = float(match.group(1))
|
||||
unit = match.group(2).lower() if match.group(2) else ''
|
||||
# 修正正则表达式:
|
||||
# 1. 允许可选的 '<' 符号在数字前
|
||||
# 2. 确保单位匹配正确,如果单位缺失,默认按 GB 处理 (LVM 的 vg_free 常常默认 GB)
|
||||
match = re.match(r'<?(\d+\.?\d*)\s*([gmktb])?', free_size_str)
|
||||
if match:
|
||||
value = float(match.group(1))
|
||||
unit = match.group(2) # unit will be 'g', 'm', 't', 'k', 'b' or None
|
||||
|
||||
if unit == 'k':
|
||||
current_vg_size_gb = value / (1024 * 1024)
|
||||
elif unit == 'm':
|
||||
current_vg_size_gb = value / 1024
|
||||
elif unit == 'g':
|
||||
current_vg_size_gb = value
|
||||
elif unit == 't':
|
||||
current_vg_size_gb = value * 1024
|
||||
elif unit == 'b' or unit == '':
|
||||
current_vg_size_gb = value / (1024 * 1024 * 1024)
|
||||
else:
|
||||
logger.warning(f"未知LVM单位: '{unit}' for '{free_size_str}'")
|
||||
if unit == 'k':
|
||||
current_vg_size_gb = value / (1024 * 1024) # KB to GB
|
||||
elif unit == 'm':
|
||||
current_vg_size_gb = value / 1024 # MB to GB
|
||||
elif unit == 'g' or unit is None: # 如果单位是 'g' 或没有指定单位,则认为是 GB
|
||||
current_vg_size_gb = value
|
||||
elif unit == 't':
|
||||
current_vg_size_gb = value * 1024 # TB to GB
|
||||
elif unit == 'b': # Bytes to GB
|
||||
current_vg_size_gb = value / (1024 * 1024 * 1024)
|
||||
else:
|
||||
logger.warning(f"无法解析LVM空闲大小字符串: '{free_size_str}'")
|
||||
logger.warning(f"未知LVM单位: '{unit}' for '{free_size_str}'")
|
||||
else:
|
||||
logger.warning(f"无法解析LVM空闲大小字符串: '{free_size_str}'")
|
||||
|
||||
vg_sizes[vg_name] = current_vg_size_gb
|
||||
vg_sizes[vg_name] = current_vg_size_gb
|
||||
|
||||
if not available_vgs:
|
||||
QMessageBox.warning(self, "警告", "没有可用于创建逻辑卷的卷组。")
|
||||
return
|
||||
if not available_vgs:
|
||||
QMessageBox.warning(self, "警告", "没有可用于创建逻辑卷的卷组。")
|
||||
return
|
||||
|
||||
dialog = CreateLvDialog(self, available_vgs, vg_sizes)
|
||||
if dialog.exec() == QDialog.Accepted:
|
||||
info = dialog.get_lv_info()
|
||||
if info:
|
||||
if self.lvm_ops.create_lv(info['lv_name'], info['vg_name'], info['size_gb'], info['use_max_space']):
|
||||
self.refresh_all_info()
|
||||
dialog = CreateLvDialog(self, available_vgs, vg_sizes)
|
||||
if dialog.exec() == QDialog.Accepted:
|
||||
info = dialog.get_lv_info()
|
||||
if info:
|
||||
if self.lvm_ops.create_lv(info['lv_name'], info['vg_name'], info['size_gb'], info['use_max_space']):
|
||||
self.refresh_all_info()
|
||||
|
||||
def _handle_delete_lv(self, lv_name, vg_name):
|
||||
lv_path = f"/dev/{vg_name}/{lv_name}"
|
||||
|
||||
Reference in New Issue
Block a user