1 |
slords |
1.1 |
From 7372ff1c7e31e726b6ebf908cdf91460a44b9d0a Mon Sep 17 00:00:00 2001 |
2 |
|
|
From: Ales Kozumplik <akozumpl@redhat.com> |
3 |
|
|
Date: Wed, 2 Mar 2011 15:14:07 +0100 |
4 |
|
|
Subject: [booty rhel5-branch 3/3] Translate dm-0 to <devicename>. (#667014) |
5 |
|
|
|
6 |
|
|
This is important so booty can match the boot/ device with the drivelist |
7 |
|
|
if boot/ is on a raid. |
8 |
|
|
|
9 |
|
|
The fix is based on a patch by Masahiro Matsuya <mmatsuya@redhat.com>. |
10 |
|
|
--- |
11 |
|
|
bootyutil.py | 20 ++++++++++++++++++++ |
12 |
|
|
checkbootloader.py | 6 ++++-- |
13 |
|
|
2 files changed, 24 insertions(+), 2 deletions(-) |
14 |
|
|
|
15 |
|
|
diff --git a/bootyutil.py b/bootyutil.py |
16 |
|
|
index cbfab5c..ea48c44 100644 |
17 |
|
|
--- a/bootyutil.py |
18 |
|
|
+++ b/bootyutil.py |
19 |
|
|
@@ -12,8 +12,11 @@ |
20 |
|
|
# |
21 |
|
|
# |
22 |
|
|
|
23 |
|
|
+import os |
24 |
|
|
import string |
25 |
|
|
|
26 |
|
|
+import rhpl.executil |
27 |
|
|
+ |
28 |
|
|
# return (disk, partition number) eg ('hda', 1) |
29 |
|
|
def getDiskPart(dev): |
30 |
|
|
cut = len(dev) |
31 |
|
|
@@ -46,3 +49,20 @@ def getDiskPart(dev): |
32 |
|
|
partNum = None |
33 |
|
|
|
34 |
|
|
return (name, partNum) |
35 |
|
|
+ |
36 |
|
|
+def name_from_dm_node(dm_node): |
37 |
|
|
+ """ Translate dm node to the device name. |
38 |
|
|
+ |
39 |
|
|
+ For instance "dm-0" to "mpath0". |
40 |
|
|
+ """ |
41 |
|
|
+ |
42 |
|
|
+ full_path = "/sys/block/%s/dev" % dm_node |
43 |
|
|
+ if not os.path.exists(full_path): |
44 |
|
|
+ raise RuntimeError("name_from_dm_node: device does not exist: %s" % |
45 |
|
|
+ full_path) |
46 |
|
|
+ dev_file = open(full_path) |
47 |
|
|
+ (major, minor) = dev_file.readline().strip().split(":") |
48 |
|
|
+ name = rhpl.executil.execWithCapture(\ |
49 |
|
|
+ "/sbin/dmsetup",["/sbin/dmsetup", "info", "--columns", "--noheadings", |
50 |
|
|
+ "-o", "name", "-j", str(major), "-m", str(minor)]) |
51 |
|
|
+ return name.strip() |
52 |
|
|
diff --git a/checkbootloader.py b/checkbootloader.py |
53 |
|
|
index 512e880..29e6a50 100644 |
54 |
|
|
--- a/checkbootloader.py |
55 |
|
|
+++ b/checkbootloader.py |
56 |
|
|
@@ -23,6 +23,7 @@ liloConfigFile = "/etc/lilo.conf" |
57 |
|
|
yabootConfigFile = "/etc/yaboot.conf" |
58 |
|
|
siloConfigFile = "/etc/silo.conf" |
59 |
|
|
|
60 |
|
|
+import bootyutil |
61 |
|
|
from bootyutil import getDiskPart |
62 |
|
|
|
63 |
|
|
def getRaidDisks(raidDevice, raidLevel=None, stripPart=1): |
64 |
|
|
@@ -39,7 +40,7 @@ def getRaidDisks(raidDevice, raidLevel=None, stripPart=1): |
65 |
|
|
f.close() |
66 |
|
|
except: |
67 |
|
|
return rc |
68 |
|
|
- |
69 |
|
|
+ |
70 |
|
|
for line in lines: |
71 |
|
|
fields = string.split(line, ' ') |
72 |
|
|
if fields[0] == raidDevice: |
73 |
|
|
@@ -51,6 +52,8 @@ def getRaidDisks(raidDevice, raidLevel=None, stripPart=1): |
74 |
|
|
dev = string.split(field, '[')[0] |
75 |
|
|
if len(dev) == 0: |
76 |
|
|
continue |
77 |
|
|
+ if dev.startswith("dm-"): |
78 |
|
|
+ dev = "mapper/%s" % bootyutil.name_from_dm_node(dev) |
79 |
|
|
if stripPart: |
80 |
|
|
disk = getDiskPart(dev)[0] |
81 |
|
|
rc.append(disk) |
82 |
|
|
@@ -58,7 +61,6 @@ def getRaidDisks(raidDevice, raidLevel=None, stripPart=1): |
83 |
|
|
rc.append(dev) |
84 |
|
|
|
85 |
|
|
return rc |
86 |
|
|
- |
87 |
|
|
|
88 |
|
|
def getBootBlock(bootDev, instRoot, seekBlocks=0): |
89 |
|
|
"""Get the boot block from bootDev. Return a 512 byte string.""" |
90 |
|
|
-- |
91 |
|
|
1.7.3.3 |
92 |
|
|
|