420d803e2d
- Do not report volume name for FW RAID container device (vpodzime) - Search for just "UUID" in mdadm --examine output (vpodzime) - Use 'mdadm --examine --export' to get MD RAID level (vpodzime)
93 lines
3.0 KiB
Diff
93 lines
3.0 KiB
Diff
From 0773e654b2eb446518692535bb349f8abcd17af0 Mon Sep 17 00:00:00 2001
|
|
From: Vratislav Podzimek <vpodzime@redhat.com>
|
|
Date: Tue, 4 Oct 2016 19:08:06 +0200
|
|
Subject: [PATCH 1/3] Use 'mdadm --examine --export' to get MD RAID level
|
|
|
|
It may not be reported properly in the 'mdadm --examine' output (e.g. for IMSM
|
|
FW RAID).
|
|
|
|
Related: rhbz#1379865
|
|
|
|
(cherry-picked from commit 075c21c6a474674c1370472b2cf74f93dff28c38)
|
|
|
|
Signed-off-by: Vratislav Podzimek <vpodzime@redhat.com>
|
|
---
|
|
src/plugins/mdraid.c | 20 ++++++++++++++++++++
|
|
tests/md_test.py | 2 +-
|
|
tests/mdadm_fw_RAID_examine/mdadm | 10 ++++++++++
|
|
3 files changed, 31 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/plugins/mdraid.c b/src/plugins/mdraid.c
|
|
index 723b756..7e6b2da 100644
|
|
--- a/src/plugins/mdraid.c
|
|
+++ b/src/plugins/mdraid.c
|
|
@@ -798,6 +798,26 @@ BDMDExamineData* bd_md_examine (gchar *device, GError **error) {
|
|
g_free (orig_data);
|
|
}
|
|
|
|
+ argv[2] = "--export";
|
|
+ success = bd_utils_exec_and_capture_output (argv, &output, error);
|
|
+ if (!success)
|
|
+ /* error is already populated */
|
|
+ return FALSE;
|
|
+
|
|
+ /* try to get a better information about RAID level because it may be
|
|
+ misleading in the output without --export */
|
|
+ output_fields = g_strsplit (output, "\n", 0);
|
|
+ g_free (output);
|
|
+ output = NULL;
|
|
+ for (i=0; (i < g_strv_length (output_fields) - 1); i++)
|
|
+ if (g_str_has_prefix (output_fields[i], "MD_LEVEL=")) {
|
|
+ value = strchr (output_fields[i], '=');
|
|
+ value++;
|
|
+ g_free (ret->level);
|
|
+ ret->level = g_strdup (value);
|
|
+ }
|
|
+ g_strfreev (output_fields);
|
|
+
|
|
argv[2] = "--brief";
|
|
success = bd_utils_exec_and_capture_output (argv, &output, error);
|
|
if (!success)
|
|
diff --git a/tests/md_test.py b/tests/md_test.py
|
|
index df90582..4b4d898 100644
|
|
--- a/tests/md_test.py
|
|
+++ b/tests/md_test.py
|
|
@@ -410,7 +410,7 @@ class FakeMDADMutilTest(unittest.TestCase):
|
|
with fake_utils("tests/mdadm_fw_RAID_examine"):
|
|
ex_data = BlockDev.md_examine("fake_dev")
|
|
|
|
- self.assertEqual(ex_data.level, "0")
|
|
+ self.assertEqual(ex_data.level, "container")
|
|
self.assertEqual(ex_data.num_devices, 1)
|
|
|
|
def test_no_metadata_examine(self):
|
|
diff --git a/tests/mdadm_fw_RAID_examine/mdadm b/tests/mdadm_fw_RAID_examine/mdadm
|
|
index c939860..6fe7f64 100755
|
|
--- a/tests/mdadm_fw_RAID_examine/mdadm
|
|
+++ b/tests/mdadm_fw_RAID_examine/mdadm
|
|
@@ -3,11 +3,21 @@
|
|
echo "$@"|grep -- "--brief" &>/dev/null
|
|
is_brief=$?
|
|
|
|
+echo "$@"|grep -- "--export" &>/dev/null
|
|
+is_export=$?
|
|
+
|
|
if [ $is_brief -eq 0 ]; then
|
|
cat <<EOF
|
|
ARRAY metadata=imsm UUID=b42756a2:37e43e47:674bd1dd:6e822145
|
|
ARRAY /dev/md/Volume0 container=b42756a2:37e43e47:674bd1dd:6e822145 member=0 UUID=8f0b5240:06168ed1:bbafeaf5:2a7b04fc
|
|
EOF
|
|
+elif [ $is_export -eq 0 ]; then
|
|
+ cat <<EOF
|
|
+MD_METADATA=imsm
|
|
+MD_LEVEL=container
|
|
+MD_UUID=b42756a2:37e43e47:674bd1dd:6e822145
|
|
+MD_DEVICES=2
|
|
+EOF
|
|
else
|
|
cat <<EOF
|
|
/dev/sda:
|
|
--
|
|
2.7.4
|
|
|