Merge ~raharper/curtin:ubuntu/eoan-sru-20200130 into curtin:ubuntu/eoan
- Git
- lp:~raharper/curtin
- ubuntu/eoan-sru-20200130
- Merge into ubuntu/eoan
Status: | Merged |
---|---|
Merged at revision: | 1c2b677876854b6639ae0ff8bdb6eebdf01f35e9 |
Proposed branch: | ~raharper/curtin:ubuntu/eoan-sru-20200130 |
Merge into: | curtin:ubuntu/eoan |
Diff against target: |
15603 lines (+12330/-488) 87 files modified
HACKING.rst (+3/-4) curtin/__init__.py (+1/-1) curtin/block/clear_holders.py (+88/-21) curtin/block/multipath.py (+74/-2) curtin/block/schemas.py (+7/-1) curtin/block/zfs.py (+24/-0) curtin/commands/block_meta.py (+99/-46) curtin/commands/curthooks.py (+200/-53) curtin/commands/install.py (+5/-1) curtin/distro.py (+25/-2) curtin/net/deps.py (+3/-3) curtin/storage_config.py (+105/-20) curtin/udev.py (+15/-7) curtin/util.py (+12/-5) debian/changelog (+63/-0) debian/control (+1/-1) doc/topics/config.rst (+6/-1) doc/topics/storage.rst (+17/-2) examples/tests/basic-dasd.yaml (+2/-2) examples/tests/bcache-ceph-nvme-simple.yaml (+107/-0) examples/tests/bcache-wipe-xfs.yaml (+4/-3) examples/tests/bridging_network_v2.yaml (+38/-0) examples/tests/dirty_disks_config.yaml (+9/-1) examples/tests/network_mtu_networkd.yaml (+93/-0) examples/tests/reuse-raid-member-partition.yaml (+73/-0) examples/tests/reuse-raid-member-wipe.yaml (+71/-0) helpers/common (+84/-13) tests/data/probert_storage_multipath.json (+1059/-0) tests/data/probert_storage_raid1_partitions.json (+951/-0) tests/data/probert_storage_zlp6.json (+6980/-0) tests/unittests/test_block.py (+26/-0) tests/unittests/test_block_dasd.py (+1/-1) tests/unittests/test_block_multipath.py (+87/-6) tests/unittests/test_block_zfs.py (+26/-0) tests/unittests/test_clear_holders.py (+131/-11) tests/unittests/test_commands_block_meta.py (+377/-36) tests/unittests/test_commands_collect_logs.py (+3/-1) tests/unittests/test_curthooks.py (+311/-26) tests/unittests/test_distro.py (+71/-0) tests/unittests/test_storage_config.py (+114/-9) tests/unittests/test_udev.py (+15/-14) tests/unittests/test_util.py (+41/-1) tests/vmtests/__init__.py (+231/-23) tests/vmtests/helpers.py (+11/-6) tests/vmtests/releases.py (+34/-0) tests/vmtests/test_apt_config_cmd.py (+1/-4) tests/vmtests/test_basic.py (+71/-81) tests/vmtests/test_basic_dasd.py (+8/-10) tests/vmtests/test_bcache_basic.py (+5/-0) tests/vmtests/test_bcache_bug1718699.py (+5/-0) tests/vmtests/test_bcache_ceph.py (+31/-0) tests/vmtests/test_bcache_partitions.py (+5/-0) tests/vmtests/test_fs_battery.py (+5/-0) tests/vmtests/test_iscsi.py (+6/-0) tests/vmtests/test_journald_reporter.py (+5/-4) tests/vmtests/test_lvm.py (+15/-18) tests/vmtests/test_lvm_iscsi.py (+5/-0) tests/vmtests/test_lvm_raid.py (+4/-0) tests/vmtests/test_lvm_root.py (+16/-1) tests/vmtests/test_mdadm_bcache.py (+92/-12) tests/vmtests/test_mdadm_iscsi.py (+5/-0) tests/vmtests/test_multipath.py (+6/-0) tests/vmtests/test_network.py (+4/-0) tests/vmtests/test_network_alias.py (+5/-0) tests/vmtests/test_network_bonding.py (+4/-0) tests/vmtests/test_network_bridging.py (+23/-0) tests/vmtests/test_network_ipv6_static.py (+4/-0) tests/vmtests/test_network_ipv6_vlan.py (+8/-0) tests/vmtests/test_network_mtu.py (+42/-10) tests/vmtests/test_network_static.py (+4/-0) tests/vmtests/test_network_static_routes.py (+5/-0) tests/vmtests/test_network_vlan.py (+12/-0) tests/vmtests/test_nvme.py (+5/-0) tests/vmtests/test_old_apt_features.py (+3/-2) tests/vmtests/test_pollinate_useragent.py (+5/-0) tests/vmtests/test_preserve.py (+5/-0) tests/vmtests/test_preserve_raid.py (+5/-0) tests/vmtests/test_raid5_bcache.py (+5/-0) tests/vmtests/test_reuse_raid_member.py (+63/-0) tests/vmtests/test_simple.py (+16/-1) tests/vmtests/test_uefi_basic.py (+11/-1) tests/vmtests/test_zfsroot.py (+18/-2) tools/block-discover-to-config (+3/-1) tools/jenkins-runner (+50/-0) tools/vmtest-filter (+12/-1) tools/vmtest-sync-images (+15/-13) tools/xkvm (+20/-4) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Server Team CI bot | continuous-integration | Needs Fixing | |
Dan Watkins (community) | Approve | ||
Review via email: mp+378355@code.launchpad.net |
Commit message
Description of the change
Server Team CI bot (server-team-bot) wrote : | # |
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want jenkins to rebuild you need to trigger it yourself):
https:/
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/
Preview Diff
1 | diff --git a/HACKING.rst b/HACKING.rst | |||
2 | index d87552b..7c26a25 100644 | |||
3 | --- a/HACKING.rst | |||
4 | +++ b/HACKING.rst | |||
5 | @@ -15,12 +15,11 @@ Do these things once | |||
6 | 15 | be listed in the `contributor-agreement-canonical`_ group. Unfortunately | 15 | be listed in the `contributor-agreement-canonical`_ group. Unfortunately |
7 | 16 | there is no easy way to check if an organization or company you are doing | 16 | there is no easy way to check if an organization or company you are doing |
8 | 17 | work for has signed. If you are unsure or have questions, email | 17 | work for has signed. If you are unsure or have questions, email |
12 | 18 | `Scott Moser <mailto:scott.moser@canonical.com>`_ and | 18 | `Josh Powers <mailto:josh.powers@canonical.com>` or ping powersj in |
13 | 19 | `Ryan Harper <mailto:ryan.harper@canonical.com>`_ or ping smoser or rharper | 19 | ``#curtin`` channel via Freenode IRC. |
11 | 20 | in ``#curtin`` channel via Freenode IRC. | ||
14 | 21 | 20 | ||
15 | 22 | When prompted for 'Project contact' or 'Canonical Project Manager' enter | 21 | When prompted for 'Project contact' or 'Canonical Project Manager' enter |
17 | 23 | 'David Britton'. | 22 | 'Josh Powers'. |
18 | 24 | 23 | ||
19 | 25 | * Configure git with your email and name for commit messages. | 24 | * Configure git with your email and name for commit messages. |
20 | 26 | 25 | ||
21 | diff --git a/curtin/__init__.py b/curtin/__init__.py | |||
22 | index 593231e..142d288 100644 | |||
23 | --- a/curtin/__init__.py | |||
24 | +++ b/curtin/__init__.py | |||
25 | @@ -32,6 +32,6 @@ FEATURES = [ | |||
26 | 32 | 'HAS_VERSION_MODULE', | 32 | 'HAS_VERSION_MODULE', |
27 | 33 | ] | 33 | ] |
28 | 34 | 34 | ||
30 | 35 | __version__ = "19.2" | 35 | __version__ = "19.3" |
31 | 36 | 36 | ||
32 | 37 | # vi: ts=4 expandtab syntax=python | 37 | # vi: ts=4 expandtab syntax=python |
33 | diff --git a/curtin/block/clear_holders.py b/curtin/block/clear_holders.py | |||
34 | index 4a099cd..b691841 100644 | |||
35 | --- a/curtin/block/clear_holders.py | |||
36 | +++ b/curtin/block/clear_holders.py | |||
37 | @@ -166,14 +166,27 @@ def shutdown_mdadm(device): | |||
38 | 166 | 166 | ||
39 | 167 | blockdev = block.sysfs_to_devpath(device) | 167 | blockdev = block.sysfs_to_devpath(device) |
40 | 168 | 168 | ||
44 | 169 | LOG.info('Wiping superblock on raid device: %s', device) | 169 | LOG.info('Discovering raid devices and spares for %s', device) |
42 | 170 | _wipe_superblock(blockdev, exclusive=False) | ||
43 | 171 | |||
45 | 172 | md_devs = ( | 170 | md_devs = ( |
46 | 173 | mdadm.md_get_devices_list(blockdev) + | 171 | mdadm.md_get_devices_list(blockdev) + |
47 | 174 | mdadm.md_get_spares_list(blockdev)) | 172 | mdadm.md_get_spares_list(blockdev)) |
48 | 175 | mdadm.set_sync_action(blockdev, action="idle") | 173 | mdadm.set_sync_action(blockdev, action="idle") |
49 | 176 | mdadm.set_sync_action(blockdev, action="frozen") | 174 | mdadm.set_sync_action(blockdev, action="frozen") |
50 | 175 | |||
51 | 176 | LOG.info('Wiping superblock on raid device: %s', device) | ||
52 | 177 | try: | ||
53 | 178 | _wipe_superblock(blockdev, exclusive=False) | ||
54 | 179 | except ValueError as e: | ||
55 | 180 | # if the array is not functional, writes to the device may fail | ||
56 | 181 | # and _wipe_superblock will raise ValueError for short writes | ||
57 | 182 | # which happens on inactive raid volumes. In that case we | ||
58 | 183 | # shouldn't give up yet as we still want to disassemble | ||
59 | 184 | # array and wipe members. Other errors such as IOError or OSError | ||
60 | 185 | # are unwelcome and will stop deployment. | ||
61 | 186 | LOG.debug('Non-fatal error writing to array device %s, ' | ||
62 | 187 | 'proceeding with shutdown: %s', blockdev, e) | ||
63 | 188 | |||
64 | 189 | LOG.info('Removing raid array members: %s', md_devs) | ||
65 | 177 | for mddev in md_devs: | 190 | for mddev in md_devs: |
66 | 178 | try: | 191 | try: |
67 | 179 | mdadm.fail_device(blockdev, mddev) | 192 | mdadm.fail_device(blockdev, mddev) |
68 | @@ -272,7 +285,26 @@ def wipe_superblock(device): | |||
69 | 272 | else: | 285 | else: |
70 | 273 | bcache._stop_device(stop_path) | 286 | bcache._stop_device(stop_path) |
71 | 274 | 287 | ||
73 | 275 | _wipe_superblock(blockdev) | 288 | # the blockdev (e.g. /dev/sda2) may be a multipath partition which can |
74 | 289 | # only be wiped via its device mapper device (e.g. /dev/dm-4) | ||
75 | 290 | # check for this and determine the correct device mapper value to use. | ||
76 | 291 | mp_dev = None | ||
77 | 292 | mp_support = multipath.multipath_supported() | ||
78 | 293 | if mp_support: | ||
79 | 294 | parent, partnum = block.get_blockdev_for_partition(blockdev) | ||
80 | 295 | parent_mpath_id = multipath.find_mpath_id_by_path(parent) | ||
81 | 296 | if parent_mpath_id is not None: | ||
82 | 297 | # construct multipath dmsetup id | ||
83 | 298 | # <mpathid>-part%d -> /dev/dm-1 | ||
84 | 299 | mp_id, mp_dev = multipath.find_mpath_id_by_parent(parent_mpath_id, | ||
85 | 300 | partnum=partnum) | ||
86 | 301 | # if we don't find a mapping then the mp partition has already been | ||
87 | 302 | # wiped/removed | ||
88 | 303 | if mp_dev: | ||
89 | 304 | LOG.debug('Found multipath device over %s, wiping holder %s', | ||
90 | 305 | blockdev, mp_dev) | ||
91 | 306 | |||
92 | 307 | _wipe_superblock(mp_dev if mp_dev else blockdev) | ||
93 | 276 | 308 | ||
94 | 277 | # if we had partitions, make sure they've been removed | 309 | # if we had partitions, make sure they've been removed |
95 | 278 | if partitions: | 310 | if partitions: |
96 | @@ -295,16 +327,19 @@ def wipe_superblock(device): | |||
97 | 295 | device, attempt + 1, len(retries), wait) | 327 | device, attempt + 1, len(retries), wait) |
98 | 296 | time.sleep(wait) | 328 | time.sleep(wait) |
99 | 297 | 329 | ||
110 | 298 | # multipath partitions are separate block devices (disks) | 330 | if mp_support: |
111 | 299 | if multipath.is_mpath_partition(blockdev): | 331 | # multipath partitions are separate block devices (disks) |
112 | 300 | multipath.remove_partition(blockdev) | 332 | if mp_dev or multipath.is_mpath_partition(blockdev): |
113 | 301 | # multipath devices must be hidden to utilize a single member (path) | 333 | multipath.remove_partition(mp_dev if mp_dev else blockdev) |
114 | 302 | elif multipath.is_mpath_device(blockdev): | 334 | # multipath devices must be hidden to utilize a single member (path) |
115 | 303 | mp_id = multipath.find_mpath_id(blockdev) | 335 | elif multipath.is_mpath_device(blockdev): |
116 | 304 | if mp_id: | 336 | mp_id = multipath.find_mpath_id(blockdev) |
117 | 305 | multipath.remove_map(mp_id) | 337 | multipath.remove_partition(blockdev) |
118 | 306 | else: | 338 | if mp_id: |
119 | 307 | raise RuntimeError('Failed to find multipath id for %s' % blockdev) | 339 | multipath.remove_map(mp_id) |
120 | 340 | else: | ||
121 | 341 | raise RuntimeError( | ||
122 | 342 | 'Failed to find multipath id for %s' % blockdev) | ||
123 | 308 | 343 | ||
124 | 309 | 344 | ||
125 | 310 | def _wipe_superblock(blockdev, exclusive=True, strict=True): | 345 | def _wipe_superblock(blockdev, exclusive=True, strict=True): |
126 | @@ -456,25 +491,39 @@ def plan_shutdown_holder_trees(holders_trees): | |||
127 | 456 | if not isinstance(holders_trees, (list, tuple)): | 491 | if not isinstance(holders_trees, (list, tuple)): |
128 | 457 | holders_trees = [holders_trees] | 492 | holders_trees = [holders_trees] |
129 | 458 | 493 | ||
130 | 494 | # sort the trees to ensure we generate a consistent plan | ||
131 | 495 | holders_trees = sorted(holders_trees, key=lambda x: x['device']) | ||
132 | 496 | |||
133 | 497 | def htree_level(tree): | ||
134 | 498 | if len(tree['holders']) == 0: | ||
135 | 499 | return 0 | ||
136 | 500 | return 1 + sum(htree_level(holder) for holder in tree['holders']) | ||
137 | 501 | |||
138 | 459 | def flatten_holders_tree(tree, level=0): | 502 | def flatten_holders_tree(tree, level=0): |
139 | 460 | """ | 503 | """ |
140 | 461 | add entries from holders tree to registry with level key corresponding | 504 | add entries from holders tree to registry with level key corresponding |
141 | 462 | to how many layers from raw disks the current device is at | 505 | to how many layers from raw disks the current device is at |
142 | 463 | """ | 506 | """ |
143 | 464 | device = tree['device'] | 507 | device = tree['device'] |
144 | 508 | device_level = htree_level(tree) | ||
145 | 465 | 509 | ||
146 | 466 | # always go with highest level if current device has been | 510 | # always go with highest level if current device has been |
147 | 467 | # encountered already. since the device and everything above it is | 511 | # encountered already. since the device and everything above it is |
148 | 468 | # re-added to the registry it ensures that any increase of level | 512 | # re-added to the registry it ensures that any increase of level |
149 | 469 | # required here will propagate down the tree | 513 | # required here will propagate down the tree |
150 | 470 | # this handles a scenario like mdadm + bcache, where the backing | 514 | # this handles a scenario like mdadm + bcache, where the backing |
152 | 471 | # device for bcache is a 3nd level item like mdadm, but the cache | 515 | # device for bcache is a 3rd level item like mdadm, but the cache |
153 | 472 | # device is 1st level (disk) or second level (partition), ensuring | 516 | # device is 1st level (disk) or second level (partition), ensuring |
154 | 473 | # that the bcache item is always considered higher level than | 517 | # that the bcache item is always considered higher level than |
155 | 474 | # anything else regardless of whether it was added to the tree via | 518 | # anything else regardless of whether it was added to the tree via |
156 | 475 | # the cache device or backing device first | 519 | # the cache device or backing device first |
157 | 476 | if device in reg: | 520 | if device in reg: |
159 | 477 | level = max(reg[device]['level'], level) | 521 | level = max(reg[device]['level'], level) + 1 |
160 | 522 | |||
161 | 523 | else: | ||
162 | 524 | # first time device to registry, assume the larger value of the | ||
163 | 525 | # current level or the length of its dependencies. | ||
164 | 526 | level = max(device_level, level) | ||
165 | 478 | 527 | ||
166 | 479 | reg[device] = {'level': level, 'device': device, | 528 | reg[device] = {'level': level, 'device': device, |
167 | 480 | 'dev_type': tree['dev_type']} | 529 | 'dev_type': tree['dev_type']} |
168 | @@ -487,10 +536,26 @@ def plan_shutdown_holder_trees(holders_trees): | |||
169 | 487 | for holders_tree in holders_trees: | 536 | for holders_tree in holders_trees: |
170 | 488 | flatten_holders_tree(holders_tree) | 537 | flatten_holders_tree(holders_tree) |
171 | 489 | 538 | ||
173 | 490 | # return list of entry dicts with highest level first, then dev_type | 539 | def devtype_order(dtype): |
174 | 540 | """Return the order in which we want to clear device types, higher | ||
175 | 541 | value should be cleared first. | ||
176 | 542 | |||
177 | 543 | :param: dtype: string. A device types name from the holders registry, | ||
178 | 544 | see _define_handlers_registry() | ||
179 | 545 | :returns: integer | ||
180 | 546 | """ | ||
181 | 547 | dev_type_order = [ | ||
182 | 548 | 'disk', 'partition', 'bcache', 'lvm', 'raid', 'crypt'] | ||
183 | 549 | return 1 + dev_type_order.index(dtype) | ||
184 | 550 | |||
185 | 551 | # return list of entry dicts with greatest htree depth. The 'level' value | ||
186 | 552 | # indicates the number of additional devices that are "below" this device. | ||
187 | 553 | # Devices must be cleared in descending 'level' value. For devices which | ||
188 | 554 | # have the same 'level' value, we sort within the 'level' by devtype order. | ||
189 | 491 | return [reg[k] | 555 | return [reg[k] |
192 | 492 | for k in sorted(reg, key=lambda x: (reg[x]['level'] * -1, | 556 | for k in sorted(reg, reverse=True, |
193 | 493 | reg[x]['dev_type']))] | 557 | key=lambda x: (reg[x]['level'], |
194 | 558 | devtype_order(reg[x]['dev_type'])))] | ||
195 | 494 | 559 | ||
196 | 495 | 560 | ||
197 | 496 | def format_holders_tree(holders_tree): | 561 | def format_holders_tree(holders_tree): |
198 | @@ -534,8 +599,10 @@ def assert_clear(base_paths): | |||
199 | 534 | valid = ('disk', 'partition') | 599 | valid = ('disk', 'partition') |
200 | 535 | if not isinstance(base_paths, (list, tuple)): | 600 | if not isinstance(base_paths, (list, tuple)): |
201 | 536 | base_paths = [base_paths] | 601 | base_paths = [base_paths] |
204 | 537 | base_paths = [block.sys_block_path(path) for path in base_paths] | 602 | base_paths = [block.sys_block_path(path, strict=False) |
205 | 538 | for holders_tree in [gen_holders_tree(p) for p in base_paths]: | 603 | for path in base_paths] |
206 | 604 | for holders_tree in [gen_holders_tree(p) | ||
207 | 605 | for p in base_paths if os.path.exists(p)]: | ||
208 | 539 | if any(holder_type not in valid and path not in base_paths | 606 | if any(holder_type not in valid and path not in base_paths |
209 | 540 | for (holder_type, path) in get_holder_types(holders_tree)): | 607 | for (holder_type, path) in get_holder_types(holders_tree)): |
210 | 541 | raise OSError('Storage not clear, remaining:\n{}' | 608 | raise OSError('Storage not clear, remaining:\n{}' |
211 | diff --git a/curtin/block/multipath.py b/curtin/block/multipath.py | |||
212 | index d1e8441..8ce0509 100644 | |||
213 | --- a/curtin/block/multipath.py | |||
214 | +++ b/curtin/block/multipath.py | |||
215 | @@ -11,6 +11,7 @@ SHOW_MAPS_FMT = "name=%n multipath='%w' sysfs='%d' paths='%N'" | |||
216 | 11 | 11 | ||
217 | 12 | 12 | ||
218 | 13 | def _extract_mpath_data(cmd, show_verb): | 13 | def _extract_mpath_data(cmd, show_verb): |
219 | 14 | """ Parse output from specifed command output via load_shell_content.""" | ||
220 | 14 | data, _err = util.subp(cmd, capture=True) | 15 | data, _err = util.subp(cmd, capture=True) |
221 | 15 | result = [] | 16 | result = [] |
222 | 16 | for line in data.splitlines(): | 17 | for line in data.splitlines(): |
223 | @@ -23,16 +24,34 @@ def _extract_mpath_data(cmd, show_verb): | |||
224 | 23 | 24 | ||
225 | 24 | 25 | ||
226 | 25 | def show_paths(): | 26 | def show_paths(): |
227 | 27 | """ Query multipathd for paths output and return a dict of the values.""" | ||
228 | 26 | cmd = ['multipathd', 'show', 'paths', 'raw', 'format', SHOW_PATHS_FMT] | 28 | cmd = ['multipathd', 'show', 'paths', 'raw', 'format', SHOW_PATHS_FMT] |
229 | 27 | return _extract_mpath_data(cmd, 'paths') | 29 | return _extract_mpath_data(cmd, 'paths') |
230 | 28 | 30 | ||
231 | 29 | 31 | ||
232 | 30 | def show_maps(): | 32 | def show_maps(): |
233 | 33 | """ Query multipathd for maps output and return a dict of the values.""" | ||
234 | 31 | cmd = ['multipathd', 'show', 'maps', 'raw', 'format', SHOW_MAPS_FMT] | 34 | cmd = ['multipathd', 'show', 'maps', 'raw', 'format', SHOW_MAPS_FMT] |
235 | 32 | return _extract_mpath_data(cmd, 'maps') | 35 | return _extract_mpath_data(cmd, 'maps') |
236 | 33 | 36 | ||
237 | 34 | 37 | ||
238 | 38 | def dmname_to_blkdev_mapping(): | ||
239 | 39 | """ Use dmsetup ls output to build a dict of DM_NAME, /dev/dm-x values.""" | ||
240 | 40 | data, _err = util.subp(['dmsetup', 'ls', '-o', 'blkdevname'], capture=True) | ||
241 | 41 | mapping = {} | ||
242 | 42 | if data and data.strip() != "No devices found": | ||
243 | 43 | LOG.debug('multipath: dmsetup ls output:\n%s', data) | ||
244 | 44 | for line in data.splitlines(): | ||
245 | 45 | if line: | ||
246 | 46 | dm_name, blkdev = line.split('\t') | ||
247 | 47 | # (dm-1) -> /dev/dm-1 | ||
248 | 48 | mapping[dm_name] = '/dev/' + blkdev.strip('()') | ||
249 | 49 | |||
250 | 50 | return mapping | ||
251 | 51 | |||
252 | 52 | |||
253 | 35 | def is_mpath_device(devpath): | 53 | def is_mpath_device(devpath): |
254 | 54 | """ Check if devpath is a multipath device, returns boolean. """ | ||
255 | 36 | info = udev.udevadm_info(devpath) | 55 | info = udev.udevadm_info(devpath) |
256 | 37 | if info.get('DM_UUID', '').startswith('mpath-'): | 56 | if info.get('DM_UUID', '').startswith('mpath-'): |
257 | 38 | return True | 57 | return True |
258 | @@ -41,6 +60,7 @@ def is_mpath_device(devpath): | |||
259 | 41 | 60 | ||
260 | 42 | 61 | ||
261 | 43 | def is_mpath_member(devpath): | 62 | def is_mpath_member(devpath): |
262 | 63 | """ Check if a device is a multipath member (a path), returns boolean. """ | ||
263 | 44 | try: | 64 | try: |
264 | 45 | util.subp(['multipath', '-c', devpath], capture=True) | 65 | util.subp(['multipath', '-c', devpath], capture=True) |
265 | 46 | return True | 66 | return True |
266 | @@ -49,6 +69,7 @@ def is_mpath_member(devpath): | |||
267 | 49 | 69 | ||
268 | 50 | 70 | ||
269 | 51 | def is_mpath_partition(devpath): | 71 | def is_mpath_partition(devpath): |
270 | 72 | """ Check if a device is a multipath partition, returns boolean. """ | ||
271 | 52 | if devpath.startswith('/dev/dm-'): | 73 | if devpath.startswith('/dev/dm-'): |
272 | 53 | if 'DM_PART' in udev.udevadm_info(devpath): | 74 | if 'DM_PART' in udev.udevadm_info(devpath): |
273 | 54 | LOG.debug("%s is multipath device partition", devpath) | 75 | LOG.debug("%s is multipath device partition", devpath) |
274 | @@ -58,6 +79,7 @@ def is_mpath_partition(devpath): | |||
275 | 58 | 79 | ||
276 | 59 | 80 | ||
277 | 60 | def mpath_partition_to_mpath_id(devpath): | 81 | def mpath_partition_to_mpath_id(devpath): |
278 | 82 | """ Return the mpath id of a multipath partition. """ | ||
279 | 61 | info = udev.udevadm_info(devpath) | 83 | info = udev.udevadm_info(devpath) |
280 | 62 | if 'DM_MPATH' in info: | 84 | if 'DM_MPATH' in info: |
281 | 63 | return info['DM_MPATH'] | 85 | return info['DM_MPATH'] |
282 | @@ -66,9 +88,10 @@ def mpath_partition_to_mpath_id(devpath): | |||
283 | 66 | 88 | ||
284 | 67 | 89 | ||
285 | 68 | def remove_partition(devpath, retries=10): | 90 | def remove_partition(devpath, retries=10): |
286 | 91 | """ Remove a multipath partition mapping. """ | ||
287 | 69 | LOG.debug('multipath: removing multipath partition: %s', devpath) | 92 | LOG.debug('multipath: removing multipath partition: %s', devpath) |
288 | 70 | for _ in range(0, retries): | 93 | for _ in range(0, retries): |
290 | 71 | util.subp(['dmsetup', 'remove', devpath], rcs=[0, 1]) | 94 | util.subp(['dmsetup', 'remove', '--force', '--retry', devpath]) |
291 | 72 | udev.udevadm_settle() | 95 | udev.udevadm_settle() |
292 | 73 | if not os.path.exists(devpath): | 96 | if not os.path.exists(devpath): |
293 | 74 | return | 97 | return |
294 | @@ -77,10 +100,11 @@ def remove_partition(devpath, retries=10): | |||
295 | 77 | 100 | ||
296 | 78 | 101 | ||
297 | 79 | def remove_map(map_id, retries=10): | 102 | def remove_map(map_id, retries=10): |
298 | 103 | """ Remove a multipath device mapping. """ | ||
299 | 80 | LOG.debug('multipath: removing multipath map: %s', map_id) | 104 | LOG.debug('multipath: removing multipath map: %s', map_id) |
300 | 81 | devpath = '/dev/mapper/%s' % map_id | 105 | devpath = '/dev/mapper/%s' % map_id |
301 | 82 | for _ in range(0, retries): | 106 | for _ in range(0, retries): |
303 | 83 | util.subp(['multipath', '-f', map_id], rcs=[0, 1]) | 107 | util.subp(['multipath', '-v3', '-R3', '-f', map_id], rcs=[0, 1]) |
304 | 84 | udev.udevadm_settle() | 108 | udev.udevadm_settle() |
305 | 85 | if not os.path.exists(devpath): | 109 | if not os.path.exists(devpath): |
306 | 86 | return | 110 | return |
307 | @@ -89,6 +113,7 @@ def remove_map(map_id, retries=10): | |||
308 | 89 | 113 | ||
309 | 90 | 114 | ||
310 | 91 | def find_mpath_members(multipath_id, paths=None): | 115 | def find_mpath_members(multipath_id, paths=None): |
311 | 116 | """ Return a list of device path for each member of aspecified mpath_id.""" | ||
312 | 92 | if not paths: | 117 | if not paths: |
313 | 93 | paths = show_paths() | 118 | paths = show_paths() |
314 | 94 | 119 | ||
315 | @@ -98,6 +123,7 @@ def find_mpath_members(multipath_id, paths=None): | |||
316 | 98 | 123 | ||
317 | 99 | 124 | ||
318 | 100 | def find_mpath_id(devpath, maps=None): | 125 | def find_mpath_id(devpath, maps=None): |
319 | 126 | """ Return the mpath_id associated with a specified device path. """ | ||
320 | 101 | if not maps: | 127 | if not maps: |
321 | 102 | maps = show_maps() | 128 | maps = show_maps() |
322 | 103 | 129 | ||
323 | @@ -109,3 +135,49 @@ def find_mpath_id(devpath, maps=None): | |||
324 | 109 | return mpmap['multipath'] | 135 | return mpmap['multipath'] |
325 | 110 | 136 | ||
326 | 111 | return None | 137 | return None |
327 | 138 | |||
328 | 139 | |||
329 | 140 | def find_mpath_id_by_path(devpath, paths=None): | ||
330 | 141 | """ Return the mpath_id associated with a specified device path. """ | ||
331 | 142 | if not paths: | ||
332 | 143 | paths = show_paths() | ||
333 | 144 | |||
334 | 145 | for path in paths: | ||
335 | 146 | if devpath == '/dev/' + path['device']: | ||
336 | 147 | return path['multipath'] | ||
337 | 148 | |||
338 | 149 | return None | ||
339 | 150 | |||
340 | 151 | |||
341 | 152 | def find_mpath_id_by_parent(multipath_id, partnum=None): | ||
342 | 153 | """ Return the mpath_id associated with a specified device path. """ | ||
343 | 154 | devmap = dmname_to_blkdev_mapping() | ||
344 | 155 | LOG.debug('multipath: dm_name blk map: %s', devmap) | ||
345 | 156 | dm_name = multipath_id | ||
346 | 157 | if partnum: | ||
347 | 158 | dm_name += "-part%d" % int(partnum) | ||
348 | 159 | |||
349 | 160 | return (dm_name, devmap.get(dm_name)) | ||
350 | 161 | |||
351 | 162 | |||
352 | 163 | def multipath_supported(): | ||
353 | 164 | """Return a boolean indicating if multipath is supported.""" | ||
354 | 165 | try: | ||
355 | 166 | multipath_assert_supported() | ||
356 | 167 | return True | ||
357 | 168 | except RuntimeError: | ||
358 | 169 | return False | ||
359 | 170 | |||
360 | 171 | |||
361 | 172 | def multipath_assert_supported(): | ||
362 | 173 | """ Determine if the runtime system supports multipath. | ||
363 | 174 | returns: True if system supports multipath | ||
364 | 175 | raises: RuntimeError: if system does not support multipath | ||
365 | 176 | """ | ||
366 | 177 | missing_progs = [p for p in ('multipath', 'multipathd') | ||
367 | 178 | if not util.which(p)] | ||
368 | 179 | if missing_progs: | ||
369 | 180 | raise RuntimeError( | ||
370 | 181 | "Missing multipath utils: %s" % ','.join(missing_progs)) | ||
371 | 182 | |||
372 | 183 | # vi: ts=4 expandtab syntax=python | ||
373 | diff --git a/curtin/block/schemas.py b/curtin/block/schemas.py | |||
374 | index f754ccc..fc7e522 100644 | |||
375 | --- a/curtin/block/schemas.py | |||
376 | +++ b/curtin/block/schemas.py | |||
377 | @@ -7,6 +7,8 @@ _path_nondev = r'(^/$|^(/[^/]+)+$)' | |||
378 | 7 | _fstypes = ['btrfs', 'ext2', 'ext3', 'ext4', 'fat', 'fat12', 'fat16', 'fat32', | 7 | _fstypes = ['btrfs', 'ext2', 'ext3', 'ext4', 'fat', 'fat12', 'fat16', 'fat32', |
379 | 8 | 'iso9660', 'vfat', 'jfs', 'ntfs', 'reiserfs', 'swap', 'xfs', | 8 | 'iso9660', 'vfat', 'jfs', 'ntfs', 'reiserfs', 'swap', 'xfs', |
380 | 9 | 'zfsroot'] | 9 | 'zfsroot'] |
381 | 10 | _ptables = ['dos', 'gpt', 'msdos', 'vtoc'] | ||
382 | 11 | _ptable_unsupported = 'unsupported' | ||
383 | 10 | 12 | ||
384 | 11 | definitions = { | 13 | definitions = { |
385 | 12 | 'id': {'type': 'string'}, | 14 | 'id': {'type': 'string'}, |
386 | @@ -14,7 +16,7 @@ definitions = { | |||
387 | 14 | 'devices': {'type': 'array', 'items': {'$ref': '#/definitions/ref_id'}}, | 16 | 'devices': {'type': 'array', 'items': {'$ref': '#/definitions/ref_id'}}, |
388 | 15 | 'name': {'type': 'string'}, | 17 | 'name': {'type': 'string'}, |
389 | 16 | 'preserve': {'type': 'boolean'}, | 18 | 'preserve': {'type': 'boolean'}, |
391 | 17 | 'ptable': {'type': 'string', 'enum': ['dos', 'gpt', 'msdos']}, | 19 | 'ptable': {'type': 'string', 'enum': _ptables + [_ptable_unsupported]}, |
392 | 18 | 'size': {'type': ['string', 'number'], | 20 | 'size': {'type': ['string', 'number'], |
393 | 19 | 'minimum': 1, | 21 | 'minimum': 1, |
394 | 20 | 'pattern': r'^([1-9]\d*(.\d+)?|\d+.\d+)(K|M|G|T)?B?'}, | 22 | 'pattern': r'^([1-9]\d*(.\d+)?|\d+.\d+)(K|M|G|T)?B?'}, |
395 | @@ -119,6 +121,7 @@ DISK = { | |||
396 | 119 | 'properties': { | 121 | 'properties': { |
397 | 120 | 'id': {'$ref': '#/definitions/id'}, | 122 | 'id': {'$ref': '#/definitions/id'}, |
398 | 121 | 'name': {'$ref': '#/definitions/name'}, | 123 | 'name': {'$ref': '#/definitions/name'}, |
399 | 124 | 'multipath': {'type': 'string'}, | ||
400 | 122 | 'preserve': {'$ref': '#/definitions/preserve'}, | 125 | 'preserve': {'$ref': '#/definitions/preserve'}, |
401 | 123 | 'wipe': {'$ref': '#/definitions/wipe'}, | 126 | 'wipe': {'$ref': '#/definitions/wipe'}, |
402 | 124 | 'type': {'const': 'disk'}, | 127 | 'type': {'const': 'disk'}, |
403 | @@ -265,6 +268,7 @@ PARTITION = { | |||
404 | 265 | 'additionalProperties': False, | 268 | 'additionalProperties': False, |
405 | 266 | 'properties': { | 269 | 'properties': { |
406 | 267 | 'id': {'$ref': '#/definitions/id'}, | 270 | 'id': {'$ref': '#/definitions/id'}, |
407 | 271 | 'multipath': {'type': 'string'}, | ||
408 | 268 | 'name': {'$ref': '#/definitions/name'}, | 272 | 'name': {'$ref': '#/definitions/name'}, |
409 | 269 | 'offset': {'$ref': '#/definitions/size'}, # XXX: This is not used | 273 | 'offset': {'$ref': '#/definitions/size'}, # XXX: This is not used |
410 | 270 | 'preserve': {'$ref': '#/definitions/preserve'}, | 274 | 'preserve': {'$ref': '#/definitions/preserve'}, |
411 | @@ -296,6 +300,8 @@ RAID = { | |||
412 | 296 | 'devices': {'$ref': '#/definitions/devices'}, | 300 | 'devices': {'$ref': '#/definitions/devices'}, |
413 | 297 | 'name': {'$ref': '#/definitions/name'}, | 301 | 'name': {'$ref': '#/definitions/name'}, |
414 | 298 | 'mdname': {'$ref': '#/definitions/name'}, # XXX: Docs need updating | 302 | 'mdname': {'$ref': '#/definitions/name'}, # XXX: Docs need updating |
415 | 303 | 'metadata': {'type': ['string', 'number']}, | ||
416 | 304 | 'preserve': {'$ref': '#/definitions/preserve'}, | ||
417 | 299 | 'ptable': {'$ref': '#/definitions/ptable'}, | 305 | 'ptable': {'$ref': '#/definitions/ptable'}, |
418 | 300 | 'spare_devices': {'$ref': '#/definitions/devices'}, | 306 | 'spare_devices': {'$ref': '#/definitions/devices'}, |
419 | 301 | 'type': {'const': 'raid'}, | 307 | 'type': {'const': 'raid'}, |
420 | diff --git a/curtin/block/zfs.py b/curtin/block/zfs.py | |||
421 | index dce15c3..25751d3 100644 | |||
422 | --- a/curtin/block/zfs.py | |||
423 | +++ b/curtin/block/zfs.py | |||
424 | @@ -281,4 +281,28 @@ def device_to_poolname(devname): | |||
425 | 281 | if vdev_type == 'zfs_member' and label: | 281 | if vdev_type == 'zfs_member' and label: |
426 | 282 | return label | 282 | return label |
427 | 283 | 283 | ||
428 | 284 | |||
429 | 285 | def get_zpool_from_config(cfg): | ||
430 | 286 | """Parse a curtin storage config and return a list | ||
431 | 287 | of zpools that were created. | ||
432 | 288 | """ | ||
433 | 289 | if not cfg: | ||
434 | 290 | return [] | ||
435 | 291 | |||
436 | 292 | if 'storage' not in cfg: | ||
437 | 293 | return [] | ||
438 | 294 | |||
439 | 295 | zpools = [] | ||
440 | 296 | sconfig = cfg['storage']['config'] | ||
441 | 297 | for item in sconfig: | ||
442 | 298 | if item['type'] == 'zpool': | ||
443 | 299 | zpools.append(item['pool']) | ||
444 | 300 | elif item['type'] == 'format': | ||
445 | 301 | if item['fstype'] == 'zfsroot': | ||
446 | 302 | # curtin.commands.blockmeta sets pool='rpool' for zfsroot | ||
447 | 303 | zpools.append('rpool') | ||
448 | 304 | |||
449 | 305 | return zpools | ||
450 | 306 | |||
451 | 307 | |||
452 | 284 | # vi: ts=4 expandtab syntax=python | 308 | # vi: ts=4 expandtab syntax=python |
453 | diff --git a/curtin/commands/block_meta.py b/curtin/commands/block_meta.py | |||
454 | index a9110a9..f287bd4 100644 | |||
455 | --- a/curtin/commands/block_meta.py | |||
456 | +++ b/curtin/commands/block_meta.py | |||
457 | @@ -2,6 +2,7 @@ | |||
458 | 2 | 2 | ||
459 | 3 | from collections import OrderedDict, namedtuple | 3 | from collections import OrderedDict, namedtuple |
460 | 4 | from curtin import (block, config, paths, util) | 4 | from curtin import (block, config, paths, util) |
461 | 5 | from curtin.block import schemas | ||
462 | 5 | from curtin.block import (bcache, clear_holders, dasd, iscsi, lvm, mdadm, mkfs, | 6 | from curtin.block import (bcache, clear_holders, dasd, iscsi, lvm, mdadm, mkfs, |
463 | 6 | zfs) | 7 | zfs) |
464 | 7 | from curtin import distro | 8 | from curtin import distro |
465 | @@ -32,6 +33,7 @@ SIMPLE = 'simple' | |||
466 | 32 | SIMPLE_BOOT = 'simple-boot' | 33 | SIMPLE_BOOT = 'simple-boot' |
467 | 33 | CUSTOM = 'custom' | 34 | CUSTOM = 'custom' |
468 | 34 | BCACHE_REGISTRATION_RETRY = [0.2] * 60 | 35 | BCACHE_REGISTRATION_RETRY = [0.2] * 60 |
469 | 36 | PTABLE_UNSUPPORTED = schemas._ptable_unsupported | ||
470 | 35 | 37 | ||
471 | 36 | CMD_ARGUMENTS = ( | 38 | CMD_ARGUMENTS = ( |
472 | 37 | ((('-D', '--devices'), | 39 | ((('-D', '--devices'), |
473 | @@ -58,7 +60,7 @@ CMD_ARGUMENTS = ( | |||
474 | 58 | @logged_time("BLOCK_META") | 60 | @logged_time("BLOCK_META") |
475 | 59 | def block_meta(args): | 61 | def block_meta(args): |
476 | 60 | # main entry point for the block-meta command. | 62 | # main entry point for the block-meta command. |
478 | 61 | state = util.load_command_environment() | 63 | state = util.load_command_environment(strict=True) |
479 | 62 | cfg = config.load_command_config(args, state) | 64 | cfg = config.load_command_config(args, state) |
480 | 63 | dd_images = util.get_dd_images(cfg.get('sources', {})) | 65 | dd_images = util.get_dd_images(cfg.get('sources', {})) |
481 | 64 | 66 | ||
482 | @@ -67,7 +69,7 @@ def block_meta(args): | |||
483 | 67 | if devices is None: | 69 | if devices is None: |
484 | 68 | devices = [] | 70 | devices = [] |
485 | 69 | if 'storage' in cfg: | 71 | if 'storage' in cfg: |
487 | 70 | devices = get_disk_paths_from_storage_config( | 72 | devices = get_device_paths_from_storage_config( |
488 | 71 | extract_storage_ordered_dict(cfg)) | 73 | extract_storage_ordered_dict(cfg)) |
489 | 72 | if len(devices) == 0: | 74 | if len(devices) == 0: |
490 | 73 | devices = cfg.get('block-meta', {}).get('devices', []) | 75 | devices = cfg.get('block-meta', {}).get('devices', []) |
491 | @@ -258,7 +260,7 @@ def make_dname_byid(path, error_msg=None, info=None): | |||
492 | 258 | 260 | ||
493 | 259 | 261 | ||
494 | 260 | def make_dname(volume, storage_config): | 262 | def make_dname(volume, storage_config): |
496 | 261 | state = util.load_command_environment() | 263 | state = util.load_command_environment(strict=True) |
497 | 262 | rules_dir = os.path.join(state['scratch'], "rules.d") | 264 | rules_dir = os.path.join(state['scratch'], "rules.d") |
498 | 263 | vol = storage_config.get(volume) | 265 | vol = storage_config.get(volume) |
499 | 264 | path = get_path_to_storage_volume(volume, storage_config) | 266 | path = get_path_to_storage_volume(volume, storage_config) |
500 | @@ -404,9 +406,8 @@ def get_path_to_storage_volume(volume, storage_config): | |||
501 | 404 | try: | 406 | try: |
502 | 405 | if not vol_value: | 407 | if not vol_value: |
503 | 406 | continue | 408 | continue |
505 | 407 | if disk_key == 'serial': | 409 | if disk_key in ['wwn', 'serial']: |
506 | 408 | volume_path = block.lookup_disk(vol_value) | 410 | volume_path = block.lookup_disk(vol_value) |
507 | 409 | break | ||
508 | 410 | elif disk_key == 'path': | 411 | elif disk_key == 'path': |
509 | 411 | if vol_value.startswith('iscsi:'): | 412 | if vol_value.startswith('iscsi:'): |
510 | 412 | i = iscsi.ensure_disk_connected(vol_value) | 413 | i = iscsi.ensure_disk_connected(vol_value) |
511 | @@ -416,21 +417,18 @@ def get_path_to_storage_volume(volume, storage_config): | |||
512 | 416 | # sys/class/block access is valid. ie, there are no | 417 | # sys/class/block access is valid. ie, there are no |
513 | 417 | # udev generated values in sysfs | 418 | # udev generated values in sysfs |
514 | 418 | volume_path = os.path.realpath(vol_value) | 419 | volume_path = os.path.realpath(vol_value) |
515 | 419 | break | ||
516 | 420 | elif disk_key == 'wwn': | ||
517 | 421 | by_wwn = '/dev/disk/by-id/wwn-%s' % vol.get('wwn') | ||
518 | 422 | volume_path = os.path.realpath(by_wwn) | ||
519 | 423 | break | ||
520 | 424 | elif disk_key == 'device_id': | 420 | elif disk_key == 'device_id': |
521 | 425 | dasd_device = dasd.DasdDevice(vol_value) | 421 | dasd_device = dasd.DasdDevice(vol_value) |
522 | 426 | volume_path = dasd_device.devname | 422 | volume_path = dasd_device.devname |
523 | 427 | break | ||
524 | 428 | except ValueError: | 423 | except ValueError: |
526 | 429 | pass | 424 | continue |
527 | 425 | # verify path exists otherwise try the next key | ||
528 | 426 | if not os.path.exists(volume_path): | ||
529 | 427 | volume_path = None | ||
530 | 430 | 428 | ||
534 | 431 | if not volume_path: | 429 | if volume_path is None: |
535 | 432 | raise ValueError("serial, wwn or path to block dev must be \ | 430 | raise ValueError("Failed to find storage volume id='%s' config: %s" |
536 | 433 | specified to identify disk") | 431 | % (vol['id'], vol)) |
537 | 434 | 432 | ||
538 | 435 | elif vol.get('type') == "lvm_partition": | 433 | elif vol.get('type') == "lvm_partition": |
539 | 436 | # For lvm partitions, a directory in /dev/ should be present with the | 434 | # For lvm partitions, a directory in /dev/ should be present with the |
540 | @@ -536,7 +534,7 @@ def disk_handler(info, storage_config): | |||
541 | 536 | 534 | ||
542 | 537 | if config.value_as_boolean(info.get('preserve')): | 535 | if config.value_as_boolean(info.get('preserve')): |
543 | 538 | # Handle preserve flag, verifying if ptable specified in config | 536 | # Handle preserve flag, verifying if ptable specified in config |
545 | 539 | if config.value_as_boolean(ptable): | 537 | if config.value_as_boolean(ptable) and ptable != PTABLE_UNSUPPORTED: |
546 | 540 | current_ptable = block.get_part_table_type(disk) | 538 | current_ptable = block.get_part_table_type(disk) |
547 | 541 | if not ((ptable in _dos_names and current_ptable in _dos_names) or | 539 | if not ((ptable in _dos_names and current_ptable in _dos_names) or |
548 | 542 | (ptable == 'gpt' and current_ptable == 'gpt')): | 540 | (ptable == 'gpt' and current_ptable == 'gpt')): |
549 | @@ -868,6 +866,47 @@ def mount_data(info, storage_config): | |||
550 | 868 | spec, path, fstype, ",".join(options), freq, passno, volume_path) | 866 | spec, path, fstype, ",".join(options), freq, passno, volume_path) |
551 | 869 | 867 | ||
552 | 870 | 868 | ||
553 | 869 | def _get_volume_type(device_path): | ||
554 | 870 | lsblock = block._lsblock([device_path]) | ||
555 | 871 | kname = block.path_to_kname(device_path) | ||
556 | 872 | return lsblock[kname]['TYPE'] | ||
557 | 873 | |||
558 | 874 | |||
559 | 875 | def get_volume_spec(device_path): | ||
560 | 876 | """ | ||
561 | 877 | Return the most reliable spec for a device per Ubuntu FSTAB wiki | ||
562 | 878 | |||
563 | 879 | https://wiki.ubuntu.com/FSTAB | ||
564 | 880 | """ | ||
565 | 881 | info = udevadm_info(path=device_path) | ||
566 | 882 | block_type = _get_volume_type(device_path) | ||
567 | 883 | |||
568 | 884 | devlinks = [] | ||
569 | 885 | if 'raid' in block_type: | ||
570 | 886 | devlinks = [link for link in info['DEVLINKS'] | ||
571 | 887 | if os.path.basename(link).startswith('md-uuid-')] | ||
572 | 888 | elif block_type in ['crypt', 'lvm', 'mpath']: | ||
573 | 889 | devlinks = [link for link in info['DEVLINKS'] | ||
574 | 890 | if os.path.basename(link).startswith('dm-uuid-')] | ||
575 | 891 | elif block_type in ['disk', 'part']: | ||
576 | 892 | if device_path.startswith('/dev/bcache'): | ||
577 | 893 | devlinks = [link for link in info['DEVLINKS'] | ||
578 | 894 | if link.startswith('/dev/bcache/by-uuid')] | ||
579 | 895 | # on s390x prefer by-path links which are stable and unique. | ||
580 | 896 | if platform.machine() == 's390x': | ||
581 | 897 | devlinks = [link for link in info['DEVLINKS'] | ||
582 | 898 | if link.startswith('/dev/disk/by-path')] | ||
583 | 899 | if len(devlinks) == 0: | ||
584 | 900 | # use FS UUID if present | ||
585 | 901 | devlinks = [link for link in info['DEVLINKS'] | ||
586 | 902 | if '/by-uuid' in link] | ||
587 | 903 | if len(devlinks) == 0 and block_type == 'part': | ||
588 | 904 | devlinks = [link for link in info['DEVLINKS'] | ||
589 | 905 | if '/by-partuuid' in link] | ||
590 | 906 | |||
591 | 907 | return devlinks[0] if len(devlinks) else device_path | ||
592 | 908 | |||
593 | 909 | |||
594 | 871 | def fstab_line_for_data(fdata): | 910 | def fstab_line_for_data(fdata): |
595 | 872 | """Return a string representing fdata in /etc/fstab format. | 911 | """Return a string representing fdata in /etc/fstab format. |
596 | 873 | 912 | ||
597 | @@ -883,8 +922,7 @@ def fstab_line_for_data(fdata): | |||
598 | 883 | if fdata.spec is None: | 922 | if fdata.spec is None: |
599 | 884 | if not fdata.device: | 923 | if not fdata.device: |
600 | 885 | raise ValueError("FstabData missing both spec and device.") | 924 | raise ValueError("FstabData missing both spec and device.") |
603 | 886 | uuid = block.get_volume_uuid(fdata.device) | 925 | spec = get_volume_spec(fdata.device) |
602 | 887 | spec = ("UUID=%s" % uuid) if uuid else fdata.device | ||
604 | 888 | else: | 926 | else: |
605 | 889 | spec = fdata.spec | 927 | spec = fdata.spec |
606 | 890 | 928 | ||
607 | @@ -896,8 +934,20 @@ def fstab_line_for_data(fdata): | |||
608 | 896 | else: | 934 | else: |
609 | 897 | options = fdata.options | 935 | options = fdata.options |
610 | 898 | 936 | ||
613 | 899 | return ' '.join((spec, path, fdata.fstype, options, | 937 | if path != "none": |
614 | 900 | fdata.freq, fdata.passno)) + "\n" | 938 | # prefer provided spec over device |
615 | 939 | device = fdata.spec if fdata.spec else None | ||
616 | 940 | # if not provided a spec, derive device from calculated spec value | ||
617 | 941 | if not device: | ||
618 | 942 | device = fdata.device if fdata.device else spec | ||
619 | 943 | comment = "# %s was on %s during curtin installation" % (path, device) | ||
620 | 944 | else: | ||
621 | 945 | comment = None | ||
622 | 946 | |||
623 | 947 | entry = ' '.join((spec, path, fdata.fstype, options, | ||
624 | 948 | fdata.freq, fdata.passno)) + "\n" | ||
625 | 949 | line = '\n'.join([comment, entry] if comment else [entry]) | ||
626 | 950 | return line | ||
627 | 901 | 951 | ||
628 | 902 | 952 | ||
629 | 903 | def mount_fstab_data(fdata, target=None): | 953 | def mount_fstab_data(fdata, target=None): |
630 | @@ -960,7 +1010,7 @@ def mount_handler(info, storage_config): | |||
631 | 960 | Mount specified device under target at 'path' and generate | 1010 | Mount specified device under target at 'path' and generate |
632 | 961 | fstab entry. | 1011 | fstab entry. |
633 | 962 | """ | 1012 | """ |
635 | 963 | state = util.load_command_environment() | 1013 | state = util.load_command_environment(strict=True) |
636 | 964 | mount_apply(mount_data(info, storage_config), | 1014 | mount_apply(mount_data(info, storage_config), |
637 | 965 | target=state.get('target'), fstab=state.get('fstab')) | 1015 | target=state.get('target'), fstab=state.get('fstab')) |
638 | 966 | 1016 | ||
639 | @@ -1050,7 +1100,7 @@ def lvm_partition_handler(info, storage_config): | |||
640 | 1050 | 1100 | ||
641 | 1051 | 1101 | ||
642 | 1052 | def dm_crypt_handler(info, storage_config): | 1102 | def dm_crypt_handler(info, storage_config): |
644 | 1053 | state = util.load_command_environment() | 1103 | state = util.load_command_environment(strict=True) |
645 | 1054 | volume = info.get('volume') | 1104 | volume = info.get('volume') |
646 | 1055 | keysize = info.get('keysize') | 1105 | keysize = info.get('keysize') |
647 | 1056 | cipher = info.get('cipher') | 1106 | cipher = info.get('cipher') |
648 | @@ -1127,11 +1177,11 @@ def dm_crypt_handler(info, storage_config): | |||
649 | 1127 | # A crypttab will be created in the same directory as the fstab in the | 1177 | # A crypttab will be created in the same directory as the fstab in the |
650 | 1128 | # configuration. This will then be copied onto the system later | 1178 | # configuration. This will then be copied onto the system later |
651 | 1129 | if state['fstab']: | 1179 | if state['fstab']: |
654 | 1130 | crypt_tab_location = os.path.join(os.path.split(state['fstab'])[0], | 1180 | state_dir = os.path.dirname(state['fstab']) |
655 | 1131 | "crypttab") | 1181 | crypt_tab_location = os.path.join(state_dir, "crypttab") |
656 | 1132 | uuid = block.get_volume_uuid(volume_path) | 1182 | uuid = block.get_volume_uuid(volume_path) |
659 | 1133 | with open(crypt_tab_location, "a") as fp: | 1183 | util.write_file(crypt_tab_location, |
660 | 1134 | fp.write("%s UUID=%s none luks\n" % (dm_name, uuid)) | 1184 | "%s UUID=%s none luks\n" % (dm_name, uuid), omode="a") |
661 | 1135 | else: | 1185 | else: |
662 | 1136 | LOG.info("fstab configuration is not present in environment, so \ | 1186 | LOG.info("fstab configuration is not present in environment, so \ |
663 | 1137 | cannot locate an appropriate directory to write crypttab in \ | 1187 | cannot locate an appropriate directory to write crypttab in \ |
664 | @@ -1139,7 +1189,7 @@ def dm_crypt_handler(info, storage_config): | |||
665 | 1139 | 1189 | ||
666 | 1140 | 1190 | ||
667 | 1141 | def raid_handler(info, storage_config): | 1191 | def raid_handler(info, storage_config): |
669 | 1142 | state = util.load_command_environment() | 1192 | state = util.load_command_environment(strict=True) |
670 | 1143 | devices = info.get('devices') | 1193 | devices = info.get('devices') |
671 | 1144 | raidlevel = info.get('raidlevel') | 1194 | raidlevel = info.get('raidlevel') |
672 | 1145 | spare_devices = info.get('spare_devices') | 1195 | spare_devices = info.get('spare_devices') |
673 | @@ -1196,11 +1246,10 @@ def raid_handler(info, storage_config): | |||
674 | 1196 | # The file must also be written onto the running system to enable it to run | 1246 | # The file must also be written onto the running system to enable it to run |
675 | 1197 | # mdadm --assemble and continue installation | 1247 | # mdadm --assemble and continue installation |
676 | 1198 | if state['fstab']: | 1248 | if state['fstab']: |
679 | 1199 | mdadm_location = os.path.join(os.path.split(state['fstab'])[0], | 1249 | state_dir = os.path.dirname(state['fstab']) |
680 | 1200 | "mdadm.conf") | 1250 | mdadm_location = os.path.join(state_dir, "mdadm.conf") |
681 | 1201 | mdadm_scan_data = mdadm.mdadm_detail_scan() | 1251 | mdadm_scan_data = mdadm.mdadm_detail_scan() |
684 | 1202 | with open(mdadm_location, "w") as fp: | 1252 | util.write_file(mdadm_location, mdadm_scan_data) |
683 | 1203 | fp.write(mdadm_scan_data) | ||
685 | 1204 | else: | 1253 | else: |
686 | 1205 | LOG.info("fstab configuration is not present in the environment, so \ | 1254 | LOG.info("fstab configuration is not present in the environment, so \ |
687 | 1206 | cannot locate an appropriate directory to write mdadm.conf in, \ | 1255 | cannot locate an appropriate directory to write mdadm.conf in, \ |
688 | @@ -1478,7 +1527,7 @@ def zpool_handler(info, storage_config): | |||
689 | 1478 | """ | 1527 | """ |
690 | 1479 | zfs.zfs_assert_supported() | 1528 | zfs.zfs_assert_supported() |
691 | 1480 | 1529 | ||
693 | 1481 | state = util.load_command_environment() | 1530 | state = util.load_command_environment(strict=True) |
694 | 1482 | 1531 | ||
695 | 1483 | # extract /dev/disk/by-id paths for each volume used | 1532 | # extract /dev/disk/by-id paths for each volume used |
696 | 1484 | vdevs = [get_path_to_storage_volume(v, storage_config) | 1533 | vdevs = [get_path_to_storage_volume(v, storage_config) |
697 | @@ -1517,7 +1566,7 @@ def zfs_handler(info, storage_config): | |||
698 | 1517 | """ | 1566 | """ |
699 | 1518 | zfs.zfs_assert_supported() | 1567 | zfs.zfs_assert_supported() |
700 | 1519 | 1568 | ||
702 | 1520 | state = util.load_command_environment() | 1569 | state = util.load_command_environment(strict=True) |
703 | 1521 | poolname = get_poolname(info, storage_config) | 1570 | poolname = get_poolname(info, storage_config) |
704 | 1522 | volume = info.get('volume') | 1571 | volume = info.get('volume') |
705 | 1523 | properties = info.get('properties', {}) | 1572 | properties = info.get('properties', {}) |
706 | @@ -1535,20 +1584,24 @@ def zfs_handler(info, storage_config): | |||
707 | 1535 | util.write_file(state['fstab'], fstab_entry, omode='a') | 1584 | util.write_file(state['fstab'], fstab_entry, omode='a') |
708 | 1536 | 1585 | ||
709 | 1537 | 1586 | ||
713 | 1538 | def get_disk_paths_from_storage_config(storage_config): | 1587 | def get_device_paths_from_storage_config(storage_config): |
714 | 1539 | """Returns a list of disk paths in a storage config filtering out | 1588 | """Returns a list of device paths in a storage config filtering out |
715 | 1540 | preserved or disks which do not have wipe configuration. | 1589 | preserved or devices which do not have wipe configuration. |
716 | 1541 | 1590 | ||
717 | 1542 | :param: storage_config: Ordered dict of storage configation | 1591 | :param: storage_config: Ordered dict of storage configation |
718 | 1543 | """ | 1592 | """ |
727 | 1544 | def get_path_if_present(disk, config): | 1593 | dpaths = [] |
728 | 1545 | return get_path_to_storage_volume(disk, config) | 1594 | for (k, v) in storage_config.items(): |
729 | 1546 | 1595 | if v.get('type') in ['disk', 'partition']: | |
730 | 1547 | return [get_path_if_present(k, storage_config) | 1596 | if config.value_as_boolean(v.get('wipe')): |
731 | 1548 | for (k, v) in storage_config.items() | 1597 | if config.value_as_boolean(v.get('preserve')): |
732 | 1549 | if v.get('type') == 'disk' and | 1598 | continue |
733 | 1550 | config.value_as_boolean(v.get('wipe')) and | 1599 | try: |
734 | 1551 | not config.value_as_boolean(v.get('preserve'))] | 1600 | dpaths.append( |
735 | 1601 | get_path_to_storage_volume(k, storage_config)) | ||
736 | 1602 | except Exception: | ||
737 | 1603 | pass | ||
738 | 1604 | return dpaths | ||
739 | 1552 | 1605 | ||
740 | 1553 | 1606 | ||
741 | 1554 | def zfsroot_update_storage_config(storage_config): | 1607 | def zfsroot_update_storage_config(storage_config): |
742 | @@ -1685,7 +1738,7 @@ def meta_custom(args): | |||
743 | 1685 | 'zpool': zpool_handler, | 1738 | 'zpool': zpool_handler, |
744 | 1686 | } | 1739 | } |
745 | 1687 | 1740 | ||
747 | 1688 | state = util.load_command_environment() | 1741 | state = util.load_command_environment(strict=True) |
748 | 1689 | cfg = config.load_command_config(args, state) | 1742 | cfg = config.load_command_config(args, state) |
749 | 1690 | 1743 | ||
750 | 1691 | storage_config_dict = extract_storage_ordered_dict(cfg) | 1744 | storage_config_dict = extract_storage_ordered_dict(cfg) |
751 | @@ -1719,7 +1772,7 @@ def meta_simple(args): | |||
752 | 1719 | """Creates a root partition. If args.mode == SIMPLE_BOOT, it will also | 1772 | """Creates a root partition. If args.mode == SIMPLE_BOOT, it will also |
753 | 1720 | create a separate /boot partition. | 1773 | create a separate /boot partition. |
754 | 1721 | """ | 1774 | """ |
756 | 1722 | state = util.load_command_environment() | 1775 | state = util.load_command_environment(strict=True) |
757 | 1723 | cfg = config.load_command_config(args, state) | 1776 | cfg = config.load_command_config(args, state) |
758 | 1724 | if args.target is not None: | 1777 | if args.target is not None: |
759 | 1725 | state['target'] = args.target | 1778 | state['target'] = args.target |
760 | diff --git a/curtin/commands/curthooks.py b/curtin/commands/curthooks.py | |||
761 | index 2869c6c..542557c 100644 | |||
762 | --- a/curtin/commands/curthooks.py | |||
763 | +++ b/curtin/commands/curthooks.py | |||
764 | @@ -104,6 +104,68 @@ def disable_overlayroot(cfg, target): | |||
765 | 104 | shutil.move(local_conf, local_conf + ".old") | 104 | shutil.move(local_conf, local_conf + ".old") |
766 | 105 | 105 | ||
767 | 106 | 106 | ||
768 | 107 | def _update_initramfs_tools(machine=None): | ||
769 | 108 | """ Return a list of binary names used to update an initramfs. | ||
770 | 109 | |||
771 | 110 | On some architectures there are helper binaries that are also | ||
772 | 111 | used and will be included in the list. | ||
773 | 112 | """ | ||
774 | 113 | tools = ['update-initramfs'] | ||
775 | 114 | if not machine: | ||
776 | 115 | machine = platform.machine() | ||
777 | 116 | if machine == 's390x': | ||
778 | 117 | tools.append('zipl') | ||
779 | 118 | elif machine == 'aarch64': | ||
780 | 119 | tools.append('flash-kernel') | ||
781 | 120 | return tools | ||
782 | 121 | |||
783 | 122 | |||
784 | 123 | def disable_update_initramfs(cfg, target, machine=None): | ||
785 | 124 | """ Find update-initramfs tools in target and change their name. """ | ||
786 | 125 | with util.ChrootableTarget(target) as in_chroot: | ||
787 | 126 | for tool in _update_initramfs_tools(machine=machine): | ||
788 | 127 | found = util.which(tool, target=target) | ||
789 | 128 | if found: | ||
790 | 129 | LOG.debug('Diverting original %s in target.', tool) | ||
791 | 130 | rename = found + '.curtin-disabled' | ||
792 | 131 | divert = ['dpkg-divert', '--add', '--rename', | ||
793 | 132 | '--divert', rename, found] | ||
794 | 133 | in_chroot.subp(divert) | ||
795 | 134 | |||
796 | 135 | # create a dummy update-initramfs which just returns true; | ||
797 | 136 | # this handles postinstall scripts which make invoke $tool | ||
798 | 137 | # directly | ||
799 | 138 | util.write_file(target + found, | ||
800 | 139 | content="#!/bin/true\n# diverted by curtin", | ||
801 | 140 | mode=0o755) | ||
802 | 141 | |||
803 | 142 | |||
804 | 143 | def update_initramfs_is_disabled(target): | ||
805 | 144 | """ Return a bool indicating if initramfs tooling is disabled. """ | ||
806 | 145 | disabled = [] | ||
807 | 146 | with util.ChrootableTarget(target) as in_chroot: | ||
808 | 147 | out, _err = in_chroot.subp(['dpkg-divert', '--list'], capture=True) | ||
809 | 148 | disabled = [divert for divert in out.splitlines() | ||
810 | 149 | if divert.endswith('.curtin-disabled')] | ||
811 | 150 | return len(disabled) > 0 | ||
812 | 151 | |||
813 | 152 | |||
814 | 153 | def enable_update_initramfs(cfg, target, machine=None): | ||
815 | 154 | """ Enable initramfs update tools by restoring their original name. """ | ||
816 | 155 | if update_initramfs_is_disabled(target): | ||
817 | 156 | with util.ChrootableTarget(target) as in_chroot: | ||
818 | 157 | for tool in _update_initramfs_tools(machine=machine): | ||
819 | 158 | LOG.info('Restoring %s in target for initrd updates.', tool) | ||
820 | 159 | found = util.which(tool, target=target) | ||
821 | 160 | if not found: | ||
822 | 161 | continue | ||
823 | 162 | # remove the diverted | ||
824 | 163 | util.del_file(target + found) | ||
825 | 164 | # un-divert and restore original file | ||
826 | 165 | in_chroot.subp( | ||
827 | 166 | ['dpkg-divert', '--rename', '--remove', found]) | ||
828 | 167 | |||
829 | 168 | |||
830 | 107 | def setup_zipl(cfg, target): | 169 | def setup_zipl(cfg, target): |
831 | 108 | if platform.machine() != 's390x': | 170 | if platform.machine() != 's390x': |
832 | 109 | return | 171 | return |
833 | @@ -262,6 +324,11 @@ def get_flash_kernel_pkgs(arch=None, uefi=None): | |||
834 | 262 | 324 | ||
835 | 263 | 325 | ||
836 | 264 | def setup_kernel_img_conf(target): | 326 | def setup_kernel_img_conf(target): |
837 | 327 | # kernel-img.conf only needed on release prior to 19.10 | ||
838 | 328 | lsb_info = distro.lsb_release(target=target) | ||
839 | 329 | if tuple(map(int, lsb_info['release'].split('.'))) >= (19, 10): | ||
840 | 330 | return | ||
841 | 331 | |||
842 | 265 | kernel_img_conf_vars = { | 332 | kernel_img_conf_vars = { |
843 | 266 | 'bootloader': 'no', | 333 | 'bootloader': 'no', |
844 | 267 | 'inboot': 'yes', | 334 | 'inboot': 'yes', |
845 | @@ -420,12 +487,25 @@ def setup_grub(cfg, target, osfamily=DISTROS.debian): | |||
846 | 420 | 487 | ||
847 | 421 | if storage_cfg_odict: | 488 | if storage_cfg_odict: |
848 | 422 | storage_grub_devices = [] | 489 | storage_grub_devices = [] |
855 | 423 | for item_id, item in storage_cfg_odict.items(): | 490 | if util.is_uefi_bootable(): |
856 | 424 | if not item.get('grub_device'): | 491 | # Curtin only supports creating one EFI system partition. Thus the |
857 | 425 | continue | 492 | # grub_device can only be the default system partition mounted at |
858 | 426 | LOG.debug("checking: %s", item) | 493 | # /boot/efi. |
859 | 427 | storage_grub_devices.append( | 494 | for item_id, item in storage_cfg_odict.items(): |
860 | 428 | get_path_to_storage_volume(item_id, storage_cfg_odict)) | 495 | if item.get('path') == '/boot/efi': |
861 | 496 | efi_dev_id = storage_cfg_odict[item['device']]['volume'] | ||
862 | 497 | LOG.debug("checking: %s", item) | ||
863 | 498 | storage_grub_devices.append(get_path_to_storage_volume( | ||
864 | 499 | efi_dev_id, storage_cfg_odict)) | ||
865 | 500 | break | ||
866 | 501 | else: | ||
867 | 502 | for item_id, item in storage_cfg_odict.items(): | ||
868 | 503 | if not item.get('grub_device'): | ||
869 | 504 | continue | ||
870 | 505 | LOG.debug("checking: %s", item) | ||
871 | 506 | storage_grub_devices.append( | ||
872 | 507 | get_path_to_storage_volume(item_id, storage_cfg_odict)) | ||
873 | 508 | |||
874 | 429 | if len(storage_grub_devices) > 0: | 509 | if len(storage_grub_devices) > 0: |
875 | 430 | grubcfg['install_devices'] = storage_grub_devices | 510 | grubcfg['install_devices'] = storage_grub_devices |
876 | 431 | 511 | ||
877 | @@ -509,10 +589,7 @@ def setup_grub(cfg, target, osfamily=DISTROS.debian): | |||
878 | 509 | LOG.debug("installing grub to %s [replace_default=%s]", | 589 | LOG.debug("installing grub to %s [replace_default=%s]", |
879 | 510 | instdevs, replace_default) | 590 | instdevs, replace_default) |
880 | 511 | 591 | ||
885 | 512 | # rhel lvm uses /run during grub configuration | 592 | with util.ChrootableTarget(target): |
882 | 513 | chroot_mounts = (["/dev", "/proc", "/sys", "/run"] | ||
883 | 514 | if osfamily == DISTROS.redhat else None) | ||
884 | 515 | with util.ChrootableTarget(target, mounts=chroot_mounts): | ||
886 | 516 | args = ['install-grub'] | 593 | args = ['install-grub'] |
887 | 517 | if util.is_uefi_bootable(): | 594 | if util.is_uefi_bootable(): |
888 | 518 | args.append("--uefi") | 595 | args.append("--uefi") |
889 | @@ -529,18 +606,66 @@ def setup_grub(cfg, target, osfamily=DISTROS.debian): | |||
890 | 529 | join_stdout_err = ['sh', '-c', 'exec "$0" "$@" 2>&1'] | 606 | join_stdout_err = ['sh', '-c', 'exec "$0" "$@" 2>&1'] |
891 | 530 | out, _err = util.subp( | 607 | out, _err = util.subp( |
892 | 531 | join_stdout_err + args + instdevs, env=env, capture=True) | 608 | join_stdout_err + args + instdevs, env=env, capture=True) |
894 | 532 | LOG.debug("%s\n%s\n", args, out) | 609 | LOG.debug("%s\n%s\n", args + instdevs, out) |
895 | 533 | 610 | ||
896 | 534 | if util.is_uefi_bootable() and grubcfg.get('update_nvram', True): | 611 | if util.is_uefi_bootable() and grubcfg.get('update_nvram', True): |
897 | 535 | uefi_reorder_loaders(grubcfg, target) | 612 | uefi_reorder_loaders(grubcfg, target) |
898 | 536 | 613 | ||
899 | 537 | 614 | ||
900 | 538 | def update_initramfs(target=None, all_kernels=False): | 615 | def update_initramfs(target=None, all_kernels=False): |
906 | 539 | cmd = ['update-initramfs', '-u'] | 616 | """ Invoke update-initramfs in the target path. |
907 | 540 | if all_kernels: | 617 | |
908 | 541 | cmd.extend(['-k', 'all']) | 618 | Look up the installed kernel versions in the target |
909 | 542 | with util.ChrootableTarget(target) as in_chroot: | 619 | to ensure that an initrd get created or updated as needed. |
910 | 543 | in_chroot.subp(cmd) | 620 | This allows curtin to invoke update-initramfs exactly once |
911 | 621 | at the end of the install instead of multiple calls. | ||
912 | 622 | """ | ||
913 | 623 | if update_initramfs_is_disabled(target): | ||
914 | 624 | return | ||
915 | 625 | |||
916 | 626 | # We keep the all_kernels flag for callers, the implementation | ||
917 | 627 | # now will operate correctly on all kernels present in the image | ||
918 | 628 | # which is almost always exactly one. | ||
919 | 629 | # | ||
920 | 630 | # Ideally curtin should be able to use update-initramfs -k all | ||
921 | 631 | # however, update-initramfs expects to be able to find out which | ||
922 | 632 | # versions of kernels are installed by using values from the | ||
923 | 633 | # kernel package invoking update-initramfs -c <kernel version>. | ||
924 | 634 | # With update-initramfs diverted, nothing captures the kernel | ||
925 | 635 | # version strings in the place where update-initramfs expects | ||
926 | 636 | # to find this information. Instead, curtin will examine | ||
927 | 637 | # /boot to see what kernels and initramfs are installed and | ||
928 | 638 | # either create or update as needed. | ||
929 | 639 | # | ||
930 | 640 | # This loop below will examine the contents of target's | ||
931 | 641 | # /boot and pattern match for kernel files. On Ubuntu this | ||
932 | 642 | # is in the form of /boot/vmlinu[xz]-<uname -r version>. | ||
933 | 643 | # | ||
934 | 644 | # For each kernel, we extract the version string and then | ||
935 | 645 | # construct the name of of the initrd file that *would* | ||
936 | 646 | # have been created when the kernel package was installed | ||
937 | 647 | # if curtin had not diverted update-initramfs to prevent | ||
938 | 648 | # duplicate initrd creation. | ||
939 | 649 | # | ||
940 | 650 | # if the initrd file exists, then we only need to invoke | ||
941 | 651 | # update-initramfs's -u (update) method. If the file does | ||
942 | 652 | # not exist, then we need to run the -c (create) method. | ||
943 | 653 | boot = paths.target_path(target, 'boot') | ||
944 | 654 | for kernel in sorted(glob.glob(boot + '/vmlinu*-*')): | ||
945 | 655 | kfile = os.path.basename(kernel) | ||
946 | 656 | # handle vmlinux or vmlinuz | ||
947 | 657 | kprefix = kfile.split('-')[0] | ||
948 | 658 | version = kfile.replace(kprefix + '-', '') | ||
949 | 659 | initrd = kernel.replace(kprefix, 'initrd.img') | ||
950 | 660 | # -u == update, -c == create | ||
951 | 661 | mode = '-u' if os.path.exists(initrd) else '-c' | ||
952 | 662 | cmd = ['update-initramfs', mode, '-k', version] | ||
953 | 663 | with util.ChrootableTarget(target) as in_chroot: | ||
954 | 664 | in_chroot.subp(cmd) | ||
955 | 665 | if not os.path.exists(initrd): | ||
956 | 666 | files = os.listdir(target + '/boot') | ||
957 | 667 | LOG.debug('Failed to find initrd %s', initrd) | ||
958 | 668 | LOG.debug('Files in target /boot: %s', files) | ||
959 | 544 | 669 | ||
960 | 545 | 670 | ||
961 | 546 | def copy_fstab(fstab, target): | 671 | def copy_fstab(fstab, target): |
962 | @@ -548,7 +673,10 @@ def copy_fstab(fstab, target): | |||
963 | 548 | LOG.warn("fstab variable not in state, not copying fstab") | 673 | LOG.warn("fstab variable not in state, not copying fstab") |
964 | 549 | return | 674 | return |
965 | 550 | 675 | ||
967 | 551 | shutil.copy(fstab, os.path.sep.join([target, 'etc/fstab'])) | 676 | content = util.load_file(fstab) |
968 | 677 | header = distro.fstab_header() | ||
969 | 678 | util.write_file(os.path.sep.join([target, 'etc/fstab']), | ||
970 | 679 | content="%s\n%s" % (header, content)) | ||
971 | 552 | 680 | ||
972 | 553 | 681 | ||
973 | 554 | def copy_crypttab(crypttab, target): | 682 | def copy_crypttab(crypttab, target): |
974 | @@ -884,12 +1012,21 @@ def install_missing_packages(cfg, target, osfamily=DISTROS.debian): | |||
975 | 884 | # UEFI requires grub-efi-{arch}. If a signed version of that package | 1012 | # UEFI requires grub-efi-{arch}. If a signed version of that package |
976 | 885 | # exists then it will be installed. | 1013 | # exists then it will be installed. |
977 | 886 | if util.is_uefi_bootable(): | 1014 | if util.is_uefi_bootable(): |
979 | 887 | uefi_pkgs = [] | 1015 | uefi_pkgs = ['efibootmgr'] |
980 | 888 | if osfamily == DISTROS.redhat: | 1016 | if osfamily == DISTROS.redhat: |
981 | 889 | # centos/redhat doesn't support 32-bit? | 1017 | # centos/redhat doesn't support 32-bit? |
983 | 890 | uefi_pkgs.extend(['grub2-efi-x64-modules']) | 1018 | if 'grub2-efi-x64-modules' not in installed_packages: |
984 | 1019 | # Previously Curtin only supported unsigned GRUB due to an | ||
985 | 1020 | # upstream bug. By default lp:maas-image-builder and | ||
986 | 1021 | # packer-maas have grub preinstalled. If grub2-efi-x64-modules | ||
987 | 1022 | # is already in the image use unsigned grub so the install | ||
988 | 1023 | # doesn't require Internet access. If grub is missing use the | ||
989 | 1024 | # signed version. | ||
990 | 1025 | uefi_pkgs.extend(['grub2-efi-x64', 'shim-x64']) | ||
991 | 891 | elif osfamily == DISTROS.debian: | 1026 | elif osfamily == DISTROS.debian: |
992 | 892 | arch = util.get_architecture() | 1027 | arch = util.get_architecture() |
993 | 1028 | if arch == 'i386': | ||
994 | 1029 | arch = 'ia32' | ||
995 | 893 | uefi_pkgs.append('grub-efi-%s' % arch) | 1030 | uefi_pkgs.append('grub-efi-%s' % arch) |
996 | 894 | 1031 | ||
997 | 895 | # Architecture might support a signed UEFI loader | 1032 | # Architecture might support a signed UEFI loader |
998 | @@ -1165,40 +1302,43 @@ def redhat_upgrade_cloud_init(netcfg, target=None, osfamily=DISTROS.redhat): | |||
999 | 1165 | cloud_init_yum_repo = ( | 1302 | cloud_init_yum_repo = ( |
1000 | 1166 | paths.target_path(target, | 1303 | paths.target_path(target, |
1001 | 1167 | 'etc/yum.repos.d/curtin-cloud-init.repo')) | 1304 | 'etc/yum.repos.d/curtin-cloud-init.repo')) |
1002 | 1305 | rhel_ver = distro.rpm_get_dist_id(target) | ||
1003 | 1168 | # Inject cloud-init daily yum repo | 1306 | # Inject cloud-init daily yum repo |
1004 | 1169 | util.write_file(cloud_init_yum_repo, | 1307 | util.write_file(cloud_init_yum_repo, |
1007 | 1170 | content=cloud_init_repo( | 1308 | content=cloud_init_repo(rhel_ver)) |
1006 | 1171 | distro.rpm_get_dist_id(target))) | ||
1008 | 1172 | 1309 | ||
1010 | 1173 | # we separate the installation of repository packages (epel, | 1310 | # ensure up-to-date ca-certificates to handle https mirror |
1011 | 1311 | # connections for epel and cloud-init-el. | ||
1012 | 1312 | packages = ['ca-certificates'] | ||
1013 | 1313 | |||
1014 | 1314 | if int(rhel_ver) < 8: | ||
1015 | 1315 | # cloud-init in RHEL < 8 requires EPEL for dependencies. | ||
1016 | 1316 | packages += ['epel-release'] | ||
1017 | 1317 | # RHEL8+ no longer ships bridge-utils. This does not effect | ||
1018 | 1318 | # bridge configuration. Only install on RHEL < 8 if not | ||
1019 | 1319 | # available, do not upgrade. | ||
1020 | 1320 | with util.ChrootableTarget(target) as in_chroot: | ||
1021 | 1321 | try: | ||
1022 | 1322 | in_chroot.subp(['rpm', '-q', 'bridge-utils'], | ||
1023 | 1323 | capture=False, rcs=[0]) | ||
1024 | 1324 | except util.ProcessExecutionError: | ||
1025 | 1325 | LOG.debug( | ||
1026 | 1326 | 'Image missing bridge-utils package, installing') | ||
1027 | 1327 | packages += ['bridge-utils'] | ||
1028 | 1328 | |||
1029 | 1329 | packages += ['cloud-init-el-release', 'cloud-init'] | ||
1030 | 1330 | |||
1031 | 1331 | # We separate the installation of repository packages (epel, | ||
1032 | 1174 | # cloud-init-el-release) as we need a new invocation of yum | 1332 | # cloud-init-el-release) as we need a new invocation of yum |
1033 | 1175 | # to read the newly installed repo files. | 1333 | # to read the newly installed repo files. |
1045 | 1176 | 1334 | for package in packages: | |
1046 | 1177 | # ensure up-to-date ca-certificates to handle https mirror | 1335 | distro.install_packages( |
1047 | 1178 | # connections | 1336 | [package], target=target, osfamily=osfamily) |
1037 | 1179 | distro.install_packages(['ca-certificates'], target=target, | ||
1038 | 1180 | osfamily=osfamily) | ||
1039 | 1181 | distro.install_packages(['epel-release'], target=target, | ||
1040 | 1182 | osfamily=osfamily) | ||
1041 | 1183 | distro.install_packages(['cloud-init-el-release'], target=target, | ||
1042 | 1184 | osfamily=osfamily) | ||
1043 | 1185 | distro.install_packages(['cloud-init'], target=target, | ||
1044 | 1186 | osfamily=osfamily) | ||
1048 | 1187 | 1337 | ||
1049 | 1188 | # remove cloud-init el-stable bootstrap repo config as the | 1338 | # remove cloud-init el-stable bootstrap repo config as the |
1050 | 1189 | # cloud-init-el-release package points to the correct repo | 1339 | # cloud-init-el-release package points to the correct repo |
1051 | 1190 | util.del_file(cloud_init_yum_repo) | 1340 | util.del_file(cloud_init_yum_repo) |
1052 | 1191 | 1341 | ||
1053 | 1192 | # install bridge-utils if needed | ||
1054 | 1193 | with util.ChrootableTarget(target) as in_chroot: | ||
1055 | 1194 | try: | ||
1056 | 1195 | in_chroot.subp(['rpm', '-q', 'bridge-utils'], | ||
1057 | 1196 | capture=False, rcs=[0]) | ||
1058 | 1197 | except util.ProcessExecutionError: | ||
1059 | 1198 | LOG.debug('Image missing bridge-utils package, installing') | ||
1060 | 1199 | distro.install_packages(['bridge-utils'], target=target, | ||
1061 | 1200 | osfamily=osfamily) | ||
1062 | 1201 | |||
1063 | 1202 | LOG.info('Passing network configuration through to target') | 1342 | LOG.info('Passing network configuration through to target') |
1064 | 1203 | net.render_netconfig_passthrough(target, netconfig={'network': netcfg}) | 1343 | net.render_netconfig_passthrough(target, netconfig={'network': netcfg}) |
1065 | 1204 | 1344 | ||
1066 | @@ -1277,6 +1417,7 @@ def builtin_curthooks(cfg, target, state): | |||
1067 | 1277 | LOG.info('Running curtin builtin curthooks') | 1417 | LOG.info('Running curtin builtin curthooks') |
1068 | 1278 | stack_prefix = state.get('report_stack_prefix', '') | 1418 | stack_prefix = state.get('report_stack_prefix', '') |
1069 | 1279 | state_etcd = os.path.split(state['fstab'])[0] | 1419 | state_etcd = os.path.split(state['fstab'])[0] |
1070 | 1420 | machine = platform.machine() | ||
1071 | 1280 | 1421 | ||
1072 | 1281 | distro_info = distro.get_distroinfo(target=target) | 1422 | distro_info = distro.get_distroinfo(target=target) |
1073 | 1282 | if not distro_info: | 1423 | if not distro_info: |
1074 | @@ -1291,6 +1432,7 @@ def builtin_curthooks(cfg, target, state): | |||
1075 | 1291 | description="configuring apt configuring apt"): | 1432 | description="configuring apt configuring apt"): |
1076 | 1292 | do_apt_config(cfg, target) | 1433 | do_apt_config(cfg, target) |
1077 | 1293 | disable_overlayroot(cfg, target) | 1434 | disable_overlayroot(cfg, target) |
1078 | 1435 | disable_update_initramfs(cfg, target, machine) | ||
1079 | 1294 | 1436 | ||
1080 | 1295 | # LP: #1742560 prevent zfs-dkms from being installed (Xenial) | 1437 | # LP: #1742560 prevent zfs-dkms from being installed (Xenial) |
1081 | 1296 | if distro.lsb_release(target=target)['codename'] == 'xenial': | 1438 | if distro.lsb_release(target=target)['codename'] == 'xenial': |
1082 | @@ -1383,12 +1525,6 @@ def builtin_curthooks(cfg, target, state): | |||
1083 | 1383 | description="enabling selinux autorelabel mode"): | 1525 | description="enabling selinux autorelabel mode"): |
1084 | 1384 | redhat_apply_selinux_autorelabel(target) | 1526 | redhat_apply_selinux_autorelabel(target) |
1085 | 1385 | 1527 | ||
1086 | 1386 | with events.ReportEventStack( | ||
1087 | 1387 | name=stack_prefix + '/updating-initramfs-configuration', | ||
1088 | 1388 | reporting_enabled=True, level="INFO", | ||
1089 | 1389 | description="updating initramfs configuration"): | ||
1090 | 1390 | redhat_update_initramfs(target, cfg) | ||
1091 | 1391 | |||
1092 | 1392 | with events.ReportEventStack( | 1528 | with events.ReportEventStack( |
1093 | 1393 | name=stack_prefix + '/pollinate-user-agent', | 1529 | name=stack_prefix + '/pollinate-user-agent', |
1094 | 1394 | reporting_enabled=True, level="INFO", | 1530 | reporting_enabled=True, level="INFO", |
1095 | @@ -1424,17 +1560,28 @@ def builtin_curthooks(cfg, target, state): | |||
1096 | 1424 | if os.path.isdir(udev_rules_d): | 1560 | if os.path.isdir(udev_rules_d): |
1097 | 1425 | copy_dname_rules(udev_rules_d, target) | 1561 | copy_dname_rules(udev_rules_d, target) |
1098 | 1426 | 1562 | ||
1099 | 1563 | with events.ReportEventStack( | ||
1100 | 1564 | name=stack_prefix + '/updating-initramfs-configuration', | ||
1101 | 1565 | reporting_enabled=True, level="INFO", | ||
1102 | 1566 | description="updating initramfs configuration"): | ||
1103 | 1567 | if osfamily == DISTROS.debian: | ||
1104 | 1568 | # re-enable update_initramfs | ||
1105 | 1569 | enable_update_initramfs(cfg, target, machine) | ||
1106 | 1570 | update_initramfs(target, all_kernels=True) | ||
1107 | 1571 | elif osfamily == DISTROS.redhat: | ||
1108 | 1572 | redhat_update_initramfs(target, cfg) | ||
1109 | 1573 | |||
1110 | 1427 | # As a rule, ARMv7 systems don't use grub. This may change some | 1574 | # As a rule, ARMv7 systems don't use grub. This may change some |
1111 | 1428 | # day, but for now, assume no. They do require the initramfs | 1575 | # day, but for now, assume no. They do require the initramfs |
1112 | 1429 | # to be updated, and this also triggers boot loader setup via | 1576 | # to be updated, and this also triggers boot loader setup via |
1113 | 1430 | # flash-kernel. | 1577 | # flash-kernel. |
1114 | 1431 | machine = platform.machine() | ||
1115 | 1432 | if (machine.startswith('armv7') or | 1578 | if (machine.startswith('armv7') or |
1116 | 1433 | machine.startswith('s390x') or | 1579 | machine.startswith('s390x') or |
1117 | 1434 | machine.startswith('aarch64') and not util.is_uefi_bootable()): | 1580 | machine.startswith('aarch64') and not util.is_uefi_bootable()): |
1121 | 1435 | update_initramfs(target) | 1581 | return |
1122 | 1436 | else: | 1582 | |
1123 | 1437 | setup_grub(cfg, target, osfamily=osfamily) | 1583 | # all other paths lead to grub |
1124 | 1584 | setup_grub(cfg, target, osfamily=osfamily) | ||
1125 | 1438 | 1585 | ||
1126 | 1439 | 1586 | ||
1127 | 1440 | def curthooks(args): | 1587 | def curthooks(args): |
1128 | diff --git a/curtin/commands/install.py b/curtin/commands/install.py | |||
1129 | index ad17508..a3471f6 100644 | |||
1130 | --- a/curtin/commands/install.py | |||
1131 | +++ b/curtin/commands/install.py | |||
1132 | @@ -11,7 +11,7 @@ import subprocess | |||
1133 | 11 | import sys | 11 | import sys |
1134 | 12 | import tempfile | 12 | import tempfile |
1135 | 13 | 13 | ||
1137 | 14 | from curtin.block import iscsi | 14 | from curtin.block import iscsi, zfs |
1138 | 15 | from curtin import config | 15 | from curtin import config |
1139 | 16 | from curtin import distro | 16 | from curtin import distro |
1140 | 17 | from curtin import util | 17 | from curtin import util |
1141 | @@ -505,6 +505,10 @@ def cmd_install(args): | |||
1142 | 505 | if iscsi.get_iscsi_disks_from_config(cfg): | 505 | if iscsi.get_iscsi_disks_from_config(cfg): |
1143 | 506 | iscsi.restart_iscsi_service() | 506 | iscsi.restart_iscsi_service() |
1144 | 507 | 507 | ||
1145 | 508 | for pool in zfs.get_zpool_from_config(cfg): | ||
1146 | 509 | LOG.debug('Exporting ZFS zpool %s', pool) | ||
1147 | 510 | zfs.zpool_export(pool) | ||
1148 | 511 | |||
1149 | 508 | shutil.rmtree(workingd.top) | 512 | shutil.rmtree(workingd.top) |
1150 | 509 | 513 | ||
1151 | 510 | apply_power_state(cfg.get('power_state')) | 514 | apply_power_state(cfg.get('power_state')) |
1152 | diff --git a/curtin/distro.py b/curtin/distro.py | |||
1153 | index 9714515..ed178bd 100644 | |||
1154 | --- a/curtin/distro.py | |||
1155 | +++ b/curtin/distro.py | |||
1156 | @@ -5,6 +5,7 @@ import os | |||
1157 | 5 | import re | 5 | import re |
1158 | 6 | import shutil | 6 | import shutil |
1159 | 7 | import tempfile | 7 | import tempfile |
1160 | 8 | import textwrap | ||
1161 | 8 | 9 | ||
1162 | 9 | from .paths import target_path | 10 | from .paths import target_path |
1163 | 10 | from .util import ( | 11 | from .util import ( |
1164 | @@ -284,7 +285,13 @@ def run_yum_command(mode, args=None, opts=None, env=None, target=None, | |||
1165 | 284 | if opts is None: | 285 | if opts is None: |
1166 | 285 | opts = [] | 286 | opts = [] |
1167 | 286 | 287 | ||
1169 | 287 | cmd = ['yum'] + defopts + opts + [mode] + args | 288 | # dnf is a drop in replacement for yum. On newer RH based systems yum |
1170 | 289 | # is just a sym link to dnf. | ||
1171 | 290 | if which('dnf', target=target): | ||
1172 | 291 | cmd = ['dnf'] | ||
1173 | 292 | else: | ||
1174 | 293 | cmd = ['yum'] | ||
1175 | 294 | cmd += defopts + opts + [mode] + args | ||
1176 | 288 | if not execute: | 295 | if not execute: |
1177 | 289 | return env, cmd | 296 | return env, cmd |
1178 | 290 | 297 | ||
1179 | @@ -311,8 +318,14 @@ def yum_install(mode, packages=None, opts=None, env=None, target=None, | |||
1180 | 311 | raise ValueError( | 318 | raise ValueError( |
1181 | 312 | 'Unsupported mode "%s" for yum package install/upgrade' % mode) | 319 | 'Unsupported mode "%s" for yum package install/upgrade' % mode) |
1182 | 313 | 320 | ||
1183 | 321 | # dnf is a drop in replacement for yum. On newer RH based systems yum | ||
1184 | 322 | # is just a sym link to dnf. | ||
1185 | 323 | if which('dnf', target=target): | ||
1186 | 324 | cmd = ['dnf'] | ||
1187 | 325 | else: | ||
1188 | 326 | cmd = ['yum'] | ||
1189 | 314 | # download first, then install/upgrade from cache | 327 | # download first, then install/upgrade from cache |
1191 | 315 | cmd = ['yum'] + defopts + opts + [mode] | 328 | cmd += defopts + opts + [mode] |
1192 | 316 | dl_opts = ['--downloadonly', '--setopt=keepcache=1'] | 329 | dl_opts = ['--downloadonly', '--setopt=keepcache=1'] |
1193 | 317 | inst_opts = ['--cacheonly'] | 330 | inst_opts = ['--cacheonly'] |
1194 | 318 | 331 | ||
1195 | @@ -509,4 +522,14 @@ def get_package_version(pkg, target=None, semx=None): | |||
1196 | 509 | return None | 522 | return None |
1197 | 510 | 523 | ||
1198 | 511 | 524 | ||
1199 | 525 | def fstab_header(): | ||
1200 | 526 | return textwrap.dedent("""\ | ||
1201 | 527 | # /etc/fstab: static file system information. | ||
1202 | 528 | # | ||
1203 | 529 | # Use 'blkid' to print the universally unique identifier for a | ||
1204 | 530 | # device; this may be used with UUID= as a more robust way to name devices | ||
1205 | 531 | # that works even if disks are added and removed. See fstab(5). | ||
1206 | 532 | # | ||
1207 | 533 | # <file system> <mount point> <type> <options> <dump> <pass>""") | ||
1208 | 534 | |||
1209 | 512 | # vi: ts=4 expandtab syntax=python | 535 | # vi: ts=4 expandtab syntax=python |
1210 | diff --git a/curtin/net/deps.py b/curtin/net/deps.py | |||
1211 | index b98961d..cbebae9 100644 | |||
1212 | --- a/curtin/net/deps.py | |||
1213 | +++ b/curtin/net/deps.py | |||
1214 | @@ -47,11 +47,11 @@ def detect_required_packages_mapping(osfamily=DISTROS.debian): | |||
1215 | 47 | distro_mapping = { | 47 | distro_mapping = { |
1216 | 48 | DISTROS.debian: { | 48 | DISTROS.debian: { |
1217 | 49 | 'bond': ['ifenslave'], | 49 | 'bond': ['ifenslave'], |
1219 | 50 | 'bonds': [], | 50 | 'bonds': ['ifenslave'], |
1220 | 51 | 'bridge': ['bridge-utils'], | 51 | 'bridge': ['bridge-utils'], |
1222 | 52 | 'bridges': [], | 52 | 'bridges': ['bridge-utils'], |
1223 | 53 | 'vlan': ['vlan'], | 53 | 'vlan': ['vlan'], |
1225 | 54 | 'vlans': []}, | 54 | 'vlans': ['vlan']}, |
1226 | 55 | DISTROS.redhat: { | 55 | DISTROS.redhat: { |
1227 | 56 | 'bond': [], | 56 | 'bond': [], |
1228 | 57 | 'bonds': [], | 57 | 'bonds': [], |
1229 | diff --git a/curtin/storage_config.py b/curtin/storage_config.py | |||
1230 | index 841d868..4244b3e 100644 | |||
1231 | --- a/curtin/storage_config.py | |||
1232 | +++ b/curtin/storage_config.py | |||
1233 | @@ -304,7 +304,8 @@ def merge_config_trees_to_list(config_trees): | |||
1234 | 304 | max_level = level | 304 | max_level = level |
1235 | 305 | item_cfg = tree[top_item_id] | 305 | item_cfg = tree[top_item_id] |
1236 | 306 | if top_item_id in reg: | 306 | if top_item_id in reg: |
1238 | 307 | raise ValueError('Duplicate id: %s' % top_item_id) | 307 | LOG.warning('Dropping Duplicate id: %s' % top_item_id) |
1239 | 308 | continue | ||
1240 | 308 | reg[top_item_id] = {'level': level, 'config': item_cfg} | 309 | reg[top_item_id] = {'level': level, 'config': item_cfg} |
1241 | 309 | 310 | ||
1242 | 310 | def sort_level(configs): | 311 | def sort_level(configs): |
1243 | @@ -388,15 +389,15 @@ class ProbertParser(object): | |||
1244 | 388 | data = {} | 389 | data = {} |
1245 | 389 | self.class_data = data | 390 | self.class_data = data |
1246 | 390 | else: | 391 | else: |
1249 | 391 | raise ValueError('probe_data missing %s data' % | 392 | LOG.warning('probe_data missing %s data', self.probe_data_key) |
1250 | 392 | self.probe_data_key) | 393 | self.class_data = {} |
1251 | 393 | 394 | ||
1252 | 394 | # We keep a reference to the blockdev_data on the superclass | 395 | # We keep a reference to the blockdev_data on the superclass |
1253 | 395 | # as each specific parser has common needs to reference | 396 | # as each specific parser has common needs to reference |
1254 | 396 | # this data separate from the BlockdevParser class. | 397 | # this data separate from the BlockdevParser class. |
1256 | 397 | self.blockdev_data = self.probe_data.get('blockdev') | 398 | self.blockdev_data = self.probe_data.get('blockdev', {}) |
1257 | 398 | if not self.blockdev_data: | 399 | if not self.blockdev_data: |
1259 | 399 | raise ValueError('probe_data missing valid "blockdev" data') | 400 | LOG.warning('probe_data missing valid "blockdev" data') |
1260 | 400 | 401 | ||
1261 | 401 | def parse(self): | 402 | def parse(self): |
1262 | 402 | raise NotImplementedError() | 403 | raise NotImplementedError() |
1263 | @@ -420,14 +421,76 @@ class ProbertParser(object): | |||
1264 | 420 | 421 | ||
1265 | 421 | return None | 422 | return None |
1266 | 422 | 423 | ||
1267 | 424 | def is_mpath(self, blockdev): | ||
1268 | 425 | if blockdev.get('DM_MULTIPATH_DEVICE_PATH') == "1": | ||
1269 | 426 | return True | ||
1270 | 427 | |||
1271 | 428 | return bool('mpath-' in blockdev.get('DM_UUID', '')) | ||
1272 | 429 | |||
1273 | 430 | def get_mpath_name(self, blockdev): | ||
1274 | 431 | mpath_data = self.probe_data.get('multipath') | ||
1275 | 432 | if not mpath_data: | ||
1276 | 433 | return None | ||
1277 | 434 | |||
1278 | 435 | bd_name = blockdev['DEVNAME'] | ||
1279 | 436 | if blockdev['DEVTYPE'] == 'partition': | ||
1280 | 437 | bd_name = self.partition_parent_devname(blockdev) | ||
1281 | 438 | bd_name = os.path.basename(bd_name) | ||
1282 | 439 | for path in mpath_data['paths']: | ||
1283 | 440 | if bd_name == path['device']: | ||
1284 | 441 | rv = path['multipath'] | ||
1285 | 442 | return rv | ||
1286 | 443 | |||
1287 | 444 | def find_mpath_member(self, blockdev): | ||
1288 | 445 | if blockdev.get('DM_MULTIPATH_DEVICE_PATH') == "1": | ||
1289 | 446 | # find all other DM_MULTIPATH_DEVICE_PATH devs with same serial | ||
1290 | 447 | serial = blockdev.get('ID_SERIAL') | ||
1291 | 448 | members = sorted([os.path.basename(dev['DEVNAME']) | ||
1292 | 449 | for dev in self.blockdev_data.values() | ||
1293 | 450 | if dev.get("ID_SERIAL", "") == serial and | ||
1294 | 451 | dev['DEVTYPE'] == blockdev['DEVTYPE']]) | ||
1295 | 452 | # [/dev/sda, /dev/sdb] | ||
1296 | 453 | # [/dev/sda1, /dev/sda2, /dev/sdb1, /dev/sdb2] | ||
1297 | 454 | |||
1298 | 455 | else: | ||
1299 | 456 | dm_mpath = blockdev.get('DM_MPATH') | ||
1300 | 457 | dm_uuid = blockdev.get('DM_UUID') | ||
1301 | 458 | dm_part = blockdev.get('DM_PART') | ||
1302 | 459 | |||
1303 | 460 | if dm_mpath: | ||
1304 | 461 | multipath = dm_mpath | ||
1305 | 462 | else: | ||
1306 | 463 | # part1-mpath-30000000000000064 | ||
1307 | 464 | # mpath-30000000000000064 | ||
1308 | 465 | # mpath-36005076306ffd6b60000000000002406 | ||
1309 | 466 | match = re.search(r'mpath\-([a-zA-Z]*|\d*)+$', dm_uuid) | ||
1310 | 467 | if not match: | ||
1311 | 468 | LOG.debug('Failed to extract multipath ID pattern from ' | ||
1312 | 469 | 'DM_UUID value: "%s"', dm_uuid) | ||
1313 | 470 | return None | ||
1314 | 471 | # remove leading 'mpath-' | ||
1315 | 472 | multipath = match.group(0)[6:] | ||
1316 | 473 | mpath_data = self.probe_data.get('multipath') | ||
1317 | 474 | if not mpath_data: | ||
1318 | 475 | return None | ||
1319 | 476 | members = sorted([path['device'] for path in mpath_data['paths'] | ||
1320 | 477 | if path['multipath'] == multipath]) | ||
1321 | 478 | |||
1322 | 479 | # append partition number if present | ||
1323 | 480 | if dm_part: | ||
1324 | 481 | members = [member + dm_part for member in members] | ||
1325 | 482 | |||
1326 | 483 | if len(members): | ||
1327 | 484 | return members[0] | ||
1328 | 485 | |||
1329 | 486 | return None | ||
1330 | 487 | |||
1331 | 423 | def blockdev_to_id(self, blockdev): | 488 | def blockdev_to_id(self, blockdev): |
1332 | 424 | """ Examine a blockdev dictionary and return a tuple of curtin | 489 | """ Examine a blockdev dictionary and return a tuple of curtin |
1333 | 425 | storage type and name that can be used as a value for | 490 | storage type and name that can be used as a value for |
1334 | 426 | storage_config ids (opaque reference to other storage_config | 491 | storage_config ids (opaque reference to other storage_config |
1335 | 427 | elements). | 492 | elements). |
1336 | 428 | """ | 493 | """ |
1337 | 429 | def is_mpath(blockdev): | ||
1338 | 430 | return bool(blockdev.get('DM_UUID', '').startswith('mpath-')) | ||
1339 | 431 | 494 | ||
1340 | 432 | def is_dmcrypt(blockdev): | 495 | def is_dmcrypt(blockdev): |
1341 | 433 | return bool(blockdev.get('DM_UUID', '').startswith('CRYPT-LUKS')) | 496 | return bool(blockdev.get('DM_UUID', '').startswith('CRYPT-LUKS')) |
1342 | @@ -441,8 +504,15 @@ class ProbertParser(object): | |||
1343 | 441 | if 'DM_LV_NAME' in blockdev: | 504 | if 'DM_LV_NAME' in blockdev: |
1344 | 442 | devtype = 'lvm-partition' | 505 | devtype = 'lvm-partition' |
1345 | 443 | name = blockdev['DM_LV_NAME'] | 506 | name = blockdev['DM_LV_NAME'] |
1348 | 444 | elif is_mpath(blockdev): | 507 | elif self.is_mpath(blockdev): |
1349 | 445 | name = blockdev['DM_UUID'] | 508 | # extract a multipath member device |
1350 | 509 | member = self.find_mpath_member(blockdev) | ||
1351 | 510 | if member: | ||
1352 | 511 | name = member | ||
1353 | 512 | else: | ||
1354 | 513 | name = blockdev['DM_UUID'] | ||
1355 | 514 | if 'DM_PART' in blockdev: | ||
1356 | 515 | devtype = 'partition' | ||
1357 | 446 | elif is_dmcrypt(blockdev): | 516 | elif is_dmcrypt(blockdev): |
1358 | 447 | devtype = 'dmcrypt' | 517 | devtype = 'dmcrypt' |
1359 | 448 | name = blockdev['DM_NAME'] | 518 | name = blockdev['DM_NAME'] |
1360 | @@ -505,7 +575,8 @@ class BcacheParser(ProbertParser): | |||
1361 | 505 | msg = ('Invalid "blockdev" value for cache device ' | 575 | msg = ('Invalid "blockdev" value for cache device ' |
1362 | 506 | 'uuid=%s' % cset_uuid) | 576 | 'uuid=%s' % cset_uuid) |
1363 | 507 | if not cset_uuid: | 577 | if not cset_uuid: |
1365 | 508 | raise ValueError(msg) | 578 | LOG.warning(msg) |
1366 | 579 | return None | ||
1367 | 509 | 580 | ||
1368 | 510 | for devuuid, config in cache_data.items(): | 581 | for devuuid, config in cache_data.items(): |
1369 | 511 | cache = _sb_get(config, 'cset.uuid') | 582 | cache = _sb_get(config, 'cset.uuid') |
1370 | @@ -518,6 +589,8 @@ class BcacheParser(ProbertParser): | |||
1371 | 518 | by_uuid = '/dev/bcache/by-uuid/' + uuid | 589 | by_uuid = '/dev/bcache/by-uuid/' + uuid |
1372 | 519 | label = _sb_get(backing_data, 'dev.label') | 590 | label = _sb_get(backing_data, 'dev.label') |
1373 | 520 | for devname, data in blockdev_data.items(): | 591 | for devname, data in blockdev_data.items(): |
1374 | 592 | if not devname: | ||
1375 | 593 | continue | ||
1376 | 521 | if devname.startswith('/dev/bcache'): | 594 | if devname.startswith('/dev/bcache'): |
1377 | 522 | # DEVLINKS is a space separated list | 595 | # DEVLINKS is a space separated list |
1378 | 523 | devlinks = data.get('DEVLINKS', '').split() | 596 | devlinks = data.get('DEVLINKS', '').split() |
1379 | @@ -525,7 +598,7 @@ class BcacheParser(ProbertParser): | |||
1380 | 525 | return devname | 598 | return devname |
1381 | 526 | if label: | 599 | if label: |
1382 | 527 | return label | 600 | return label |
1384 | 528 | raise ValueError('Failed to find bcache %s ' % (by_uuid)) | 601 | LOG.warning('Failed to find bcache %s ' % (by_uuid)) |
1385 | 529 | 602 | ||
1386 | 530 | def _cache_mode(dev_data): | 603 | def _cache_mode(dev_data): |
1387 | 531 | # "1 [writeback]" -> "writeback" | 604 | # "1 [writeback]" -> "writeback" |
1388 | @@ -535,12 +608,14 @@ class BcacheParser(ProbertParser): | |||
1389 | 535 | 608 | ||
1390 | 536 | return None | 609 | return None |
1391 | 537 | 610 | ||
1392 | 611 | if not self.blockdev_data: | ||
1393 | 612 | return None | ||
1394 | 613 | |||
1395 | 538 | backing_device = backing_data.get('blockdev') | 614 | backing_device = backing_data.get('blockdev') |
1396 | 539 | cache_device = _find_cache_device(backing_data, self.caching) | 615 | cache_device = _find_cache_device(backing_data, self.caching) |
1397 | 540 | cache_mode = _cache_mode(backing_data) | 616 | cache_mode = _cache_mode(backing_data) |
1401 | 541 | bcache_name = os.path.basename( | 617 | bcache_name = os.path.basename(_find_bcache_devname(backing_uuid, |
1402 | 542 | _find_bcache_devname(backing_uuid, backing_data, | 618 | backing_data, self.blockdev_data)) |
1400 | 543 | self.blockdev_data)) | ||
1403 | 544 | bcache_entry = {'type': 'bcache', 'id': 'disk-%s' % bcache_name, | 619 | bcache_entry = {'type': 'bcache', 'id': 'disk-%s' % bcache_name, |
1404 | 545 | 'name': bcache_name} | 620 | 'name': bcache_name} |
1405 | 546 | 621 | ||
1406 | @@ -571,9 +646,10 @@ class BlockdevParser(ProbertParser): | |||
1407 | 571 | errors = [] | 646 | errors = [] |
1408 | 572 | 647 | ||
1409 | 573 | for devname, data in self.blockdev_data.items(): | 648 | for devname, data in self.blockdev_data.items(): |
1411 | 574 | # skip composed devices here | 649 | # skip composed devices here, except partitions |
1412 | 575 | if data.get('DEVPATH', '').startswith('/devices/virtual'): | 650 | if data.get('DEVPATH', '').startswith('/devices/virtual'): |
1414 | 576 | continue | 651 | if data.get('DEVTYPE', '') != "partition": |
1415 | 652 | continue | ||
1416 | 577 | entry = self.asdict(data) | 653 | entry = self.asdict(data) |
1417 | 578 | if entry: | 654 | if entry: |
1418 | 579 | try: | 655 | try: |
1419 | @@ -660,6 +736,9 @@ class BlockdevParser(ProbertParser): | |||
1420 | 660 | 'type': blockdev_data['DEVTYPE'], | 736 | 'type': blockdev_data['DEVTYPE'], |
1421 | 661 | 'id': self.blockdev_to_id(blockdev_data), | 737 | 'id': self.blockdev_to_id(blockdev_data), |
1422 | 662 | } | 738 | } |
1423 | 739 | if blockdev_data.get('DM_MULTIPATH_DEVICE_PATH') == "1": | ||
1424 | 740 | mpath_name = self.get_mpath_name(blockdev_data) | ||
1425 | 741 | entry['multipath'] = mpath_name | ||
1426 | 663 | 742 | ||
1427 | 664 | # default disks to gpt | 743 | # default disks to gpt |
1428 | 665 | if entry['type'] == 'disk': | 744 | if entry['type'] == 'disk': |
1429 | @@ -670,7 +749,11 @@ class BlockdevParser(ProbertParser): | |||
1430 | 670 | entry.update(uniq_ids) | 749 | entry.update(uniq_ids) |
1431 | 671 | 750 | ||
1432 | 672 | if 'ID_PART_TABLE_TYPE' in blockdev_data: | 751 | if 'ID_PART_TABLE_TYPE' in blockdev_data: |
1434 | 673 | entry['ptable'] = blockdev_data['ID_PART_TABLE_TYPE'] | 752 | ptype = blockdev_data['ID_PART_TABLE_TYPE'] |
1435 | 753 | if ptype in schemas._ptables: | ||
1436 | 754 | entry['ptable'] = ptype | ||
1437 | 755 | else: | ||
1438 | 756 | entry['ptable'] = schemas._ptable_unsupported | ||
1439 | 674 | return entry | 757 | return entry |
1440 | 675 | 758 | ||
1441 | 676 | if entry['type'] == 'partition': | 759 | if entry['type'] == 'partition': |
1442 | @@ -920,7 +1003,6 @@ class RaidParser(ProbertParser): | |||
1443 | 920 | Collects storage config type: raid for valid | 1003 | Collects storage config type: raid for valid |
1444 | 921 | data and returns tuple of lists, configs, errors. | 1004 | data and returns tuple of lists, configs, errors. |
1445 | 922 | """ | 1005 | """ |
1446 | 923 | |||
1447 | 924 | configs = [] | 1006 | configs = [] |
1448 | 925 | errors = [] | 1007 | errors = [] |
1449 | 926 | for devname, data in self.class_data.items(): | 1008 | for devname, data in self.class_data.items(): |
1450 | @@ -1104,7 +1186,7 @@ class ZfsParser(ProbertParser): | |||
1451 | 1104 | return (zpool_configs + zfs_configs, errors) | 1186 | return (zpool_configs + zfs_configs, errors) |
1452 | 1105 | 1187 | ||
1453 | 1106 | 1188 | ||
1455 | 1107 | def extract_storage_config(probe_data): | 1189 | def extract_storage_config(probe_data, strict=False): |
1456 | 1108 | """ Examine a probert storage dictionary and extract a curtin | 1190 | """ Examine a probert storage dictionary and extract a curtin |
1457 | 1109 | storage configuration that would recreate all of the | 1191 | storage configuration that would recreate all of the |
1458 | 1110 | storage devices present in the provided data. | 1192 | storage devices present in the provided data. |
1459 | @@ -1156,7 +1238,10 @@ def extract_storage_config(probe_data): | |||
1460 | 1156 | for e in errors: | 1238 | for e in errors: |
1461 | 1157 | LOG.exception('Validation error: %s\n' % e) | 1239 | LOG.exception('Validation error: %s\n' % e) |
1462 | 1158 | if len(errors) > 0: | 1240 | if len(errors) > 0: |
1464 | 1159 | raise RuntimeError("Extract storage config does not validate.") | 1241 | errmsg = "Extract storage config does not validate." |
1465 | 1242 | LOG.warning(errmsg) | ||
1466 | 1243 | if strict: | ||
1467 | 1244 | raise RuntimeError(errmsg) | ||
1468 | 1160 | 1245 | ||
1469 | 1161 | # build and merge probed data into a valid storage config by | 1246 | # build and merge probed data into a valid storage config by |
1470 | 1162 | # generating a config tree for each item in the probed data | 1247 | # generating a config tree for each item in the probed data |
1471 | diff --git a/curtin/udev.py b/curtin/udev.py | |||
1472 | index 106a7e7..e2e3dd0 100644 | |||
1473 | --- a/curtin/udev.py | |||
1474 | +++ b/curtin/udev.py | |||
1475 | @@ -1,6 +1,8 @@ | |||
1476 | 1 | # This file is part of curtin. See LICENSE file for copyright and license info. | 1 | # This file is part of curtin. See LICENSE file for copyright and license info. |
1477 | 2 | 2 | ||
1478 | 3 | import shlex | ||
1479 | 3 | import os | 4 | import os |
1480 | 5 | |||
1481 | 4 | from curtin import util | 6 | from curtin import util |
1482 | 5 | from curtin.log import logged_call | 7 | from curtin.log import logged_call |
1483 | 6 | 8 | ||
1484 | @@ -73,7 +75,7 @@ def udevadm_info(path=None): | |||
1485 | 73 | if not path: | 75 | if not path: |
1486 | 74 | raise ValueError('Invalid path: "%s"' % path) | 76 | raise ValueError('Invalid path: "%s"' % path) |
1487 | 75 | 77 | ||
1489 | 76 | info_cmd = ['udevadm', 'info', '--query=property', path] | 78 | info_cmd = ['udevadm', 'info', '--query=property', '--export', path] |
1490 | 77 | output, _ = util.subp(info_cmd, capture=True) | 79 | output, _ = util.subp(info_cmd, capture=True) |
1491 | 78 | 80 | ||
1492 | 79 | # strip for trailing empty line | 81 | # strip for trailing empty line |
1493 | @@ -87,13 +89,19 @@ def udevadm_info(path=None): | |||
1494 | 87 | if not value: | 89 | if not value: |
1495 | 88 | value = None | 90 | value = None |
1496 | 89 | if value: | 91 | if value: |
1501 | 90 | # devlinks is a list of paths separated by space | 92 | # preserve spaces in values to match udev database |
1502 | 91 | # convert to a list for easy use | 93 | parsed = shlex.split(value) |
1503 | 92 | if key == 'DEVLINKS': | 94 | if ' ' not in value: |
1504 | 93 | info[key] = value.split() | 95 | info[key] = parsed[0] |
1505 | 94 | else: | 96 | else: |
1508 | 95 | # preserve spaces in values, to match udev database | 97 | # special case some known entries with spaces, e.g. ID_SERIAL |
1509 | 96 | info[key] = value | 98 | # and DEVLINKS, see tests/unittests/test_udev.py |
1510 | 99 | if key == "DEVLINKS": | ||
1511 | 100 | info[key] = shlex.split(parsed[0]) | ||
1512 | 101 | elif key == 'ID_SERIAL': | ||
1513 | 102 | info[key] = parsed[0] | ||
1514 | 103 | else: | ||
1515 | 104 | info[key] = parsed | ||
1516 | 97 | 105 | ||
1517 | 98 | return info | 106 | return info |
1518 | 99 | 107 | ||
1519 | diff --git a/curtin/util.py b/curtin/util.py | |||
1520 | index ebe219d..eb2228f 100644 | |||
1521 | --- a/curtin/util.py | |||
1522 | +++ b/curtin/util.py | |||
1523 | @@ -632,7 +632,7 @@ class ChrootableTarget(object): | |||
1524 | 632 | if mounts is not None: | 632 | if mounts is not None: |
1525 | 633 | self.mounts = mounts | 633 | self.mounts = mounts |
1526 | 634 | else: | 634 | else: |
1528 | 635 | self.mounts = ["/dev", "/proc", "/sys"] | 635 | self.mounts = ["/dev", "/proc", "/run", "/sys"] |
1529 | 636 | self.umounts = [] | 636 | self.umounts = [] |
1530 | 637 | self.disabled_daemons = False | 637 | self.disabled_daemons = False |
1531 | 638 | self.allow_daemons = allow_daemons | 638 | self.allow_daemons = allow_daemons |
1532 | @@ -906,8 +906,9 @@ def sanitize_source(source): | |||
1533 | 906 | if type(source) is dict: | 906 | if type(source) is dict: |
1534 | 907 | # already sanitized? | 907 | # already sanitized? |
1535 | 908 | return source | 908 | return source |
1538 | 909 | supported = ['tgz', 'dd-tgz', 'dd-tbz', 'dd-txz', 'dd-tar', 'dd-bz2', | 909 | supported = ['tgz', 'dd-tgz', 'tbz', 'dd-tbz', 'txz', 'dd-txz', 'dd-tar', |
1539 | 910 | 'dd-gz', 'dd-xz', 'dd-raw', 'fsimage', 'fsimage-layered'] | 910 | 'dd-bz2', 'dd-gz', 'dd-xz', 'dd-raw', 'fsimage', |
1540 | 911 | 'fsimage-layered'] | ||
1541 | 911 | deftype = 'tgz' | 912 | deftype = 'tgz' |
1542 | 912 | for i in supported: | 913 | for i in supported: |
1543 | 913 | prefix = i + ":" | 914 | prefix = i + ":" |
1544 | @@ -915,8 +916,14 @@ def sanitize_source(source): | |||
1545 | 915 | return {'type': i, 'uri': source[len(prefix):]} | 916 | return {'type': i, 'uri': source[len(prefix):]} |
1546 | 916 | 917 | ||
1547 | 917 | # translate squashfs: to fsimage type. | 918 | # translate squashfs: to fsimage type. |
1550 | 918 | if source.startswith("squashfs:"): | 919 | if source.startswith("squashfs://"): |
1551 | 919 | return {'type': 'fsimage', 'uri': source[len("squashfs:")]} | 920 | return {'type': 'fsimage', 'uri': source[len("squashfs://"):]} |
1552 | 921 | |||
1553 | 922 | elif source.startswith("squashfs:"): | ||
1554 | 923 | LOG.warning("The squashfs: prefix is deprecated and" | ||
1555 | 924 | "will be removed in a future release." | ||
1556 | 925 | "Please use squashfs:// instead.") | ||
1557 | 926 | return {'type': 'fsimage', 'uri': source[len("squashfs:"):]} | ||
1558 | 920 | 927 | ||
1559 | 921 | if source.endswith("squashfs") or source.endswith("squash"): | 928 | if source.endswith("squashfs") or source.endswith("squash"): |
1560 | 922 | return {'type': 'fsimage', 'uri': source} | 929 | return {'type': 'fsimage', 'uri': source} |
1561 | diff --git a/debian/changelog b/debian/changelog | |||
1562 | index a5c5527..6d739ab 100644 | |||
1563 | --- a/debian/changelog | |||
1564 | +++ b/debian/changelog | |||
1565 | @@ -1,3 +1,66 @@ | |||
1566 | 1 | curtin (19.3-17-g50ffca46-0ubuntu1~19.10.1) eoan; urgency=medium | ||
1567 | 2 | |||
1568 | 3 | * New upstream snapshot. (LP: #1861452) | ||
1569 | 4 | - clear-holders: ensure we wipe device even if multipath enabled not not mp | ||
1570 | 5 | - block_meta: use reliable fs_spec entries for block devices | ||
1571 | 6 | - multipath: handle removal of multipath partitions correctly | ||
1572 | 7 | - vmtests: skip Focal deploying Centos70 ScsiBasic | ||
1573 | 8 | - vmtests: fix network mtu tests, separating ifupdown vs networkd | ||
1574 | 9 | - doc: Fix kexec documentation bug. [Mike Pontillo] | ||
1575 | 10 | - vmtests: Add Focal Fossa | ||
1576 | 11 | - centos: Add centos/rhel 8 support, enable UEFI Secure Boot | ||
1577 | 12 | [Lee Trager] | ||
1578 | 13 | - Bump XFS /boot skip-by date out a while | ||
1579 | 14 | - vmtest: Fix a missing unset of OUTPUT_FSTAB | ||
1580 | 15 | - curthooks: handle s390x/aarch64 kernel install hooks | ||
1581 | 16 | - clear-holders: handle arbitrary order of devices to clear | ||
1582 | 17 | - curthooks: only run update-initramfs in target once | ||
1583 | 18 | - test_network_mtu: bump fixby date for MTU tests | ||
1584 | 19 | - block-discover: don't skip partitions on virtual devices | ||
1585 | 20 | - block-discover: handle partial probe data | ||
1586 | 21 | - Fix parsing of squashfs: uri prefix for installation sources | ||
1587 | 22 | [Daniel Fox] | ||
1588 | 23 | - Release 19.3 | ||
1589 | 24 | - Update HACKING.rst with Josh Powers contact info. | ||
1590 | 25 | - t/jenkins-runner: replace $EPOCHSECONDS with 'date +%s' [Paride Legovini] | ||
1591 | 26 | - curthooks: skip setup_kernel_img_conf on eoan and newer | ||
1592 | 27 | - block_meta: use lookup for wwn, fix fallback from wwn, serial, path | ||
1593 | 28 | - vmtest: Adjust TestScsiBasic to use dnames to find correct disk | ||
1594 | 29 | - schema: Add ptable value 'unsupported' | ||
1595 | 30 | - tools/xkvm: add -nographic to speed up devopt query | ||
1596 | 31 | - test_block_dasd: fix random_device_id to only generate valid IDs | ||
1597 | 32 | - vmtest: update skip_if_arch message | ||
1598 | 33 | - Add skip_by_date to eoan ipv6 vlan test | ||
1599 | 34 | - storage_config: interpret value, not presence, of | ||
1600 | 35 | DM_MULTIPATH_DEVICE_PATH [Michael Hudson-Doyle] | ||
1601 | 36 | - vmtest: Add skip_by_date for test_ip_output on eoan + vlans | ||
1602 | 37 | - block-schema: update raid schema for preserve and metadata | ||
1603 | 38 | - dasd: update partition table value to 'vtoc' | ||
1604 | 39 | - clear-holders: increase the level for devices with holders by one | ||
1605 | 40 | - tests: mock timestamp used in collect-log file creation | ||
1606 | 41 | - ChrootableTarget: mount /run to resolve lvm/mdadm issues which | ||
1607 | 42 | require it. | ||
1608 | 43 | - block-discover: handle multipath disks | ||
1609 | 44 | - Handle partial raid on partitions | ||
1610 | 45 | - install: export zpools if present in the storage-config | ||
1611 | 46 | - block-schema: allow 'mac' as partition table type | ||
1612 | 47 | - jenkins-runner: disable the lockfile timeout by default [Paride Legovini] | ||
1613 | 48 | - curthooks: use correct grub-efi package name on i386 | ||
1614 | 49 | - vmtest-sync-images: remove unused imports [Paride Legovini] | ||
1615 | 50 | - vmtests: use file locking on the images [Paride Legovini] | ||
1616 | 51 | - vmtest: enable arm64 [Paride Legovini] | ||
1617 | 52 | - Make the vmtests/test_basic test suite run on ppc64el [Paride Legovini] | ||
1618 | 53 | - vmtests: separate arch and target_arch in tests [Paride Legovini] | ||
1619 | 54 | - vmtests: new decorator: skip_if_arch [Paride Legovini] | ||
1620 | 55 | - vmtests: increase the VM memory for Bionic | ||
1621 | 56 | - vmtests: Skip Eoan ZFS Root tests until bug fix is complete | ||
1622 | 57 | - util: add support for 'tbz', 'txz' tar format types to sanitize_source | ||
1623 | 58 | - net: ensure eni helper tools install if given netplan config | ||
1624 | 59 | - d/control: update Depends for new probert package names | ||
1625 | 60 | [Dimitri John Ledkov] | ||
1626 | 61 | |||
1627 | 62 | -- Ryan Harper <ryan.harper@canonical.com> Thu, 30 Jan 2020 13:46:56 -0600 | ||
1628 | 63 | |||
1629 | 1 | curtin (19.2-9-g38ce22b0-0ubuntu1) eoan; urgency=medium | 64 | curtin (19.2-9-g38ce22b0-0ubuntu1) eoan; urgency=medium |
1630 | 2 | 65 | ||
1631 | 3 | * New upstream snapshot. | 66 | * New upstream snapshot. |
1632 | diff --git a/debian/control b/debian/control | |||
1633 | index b5b857b..9fddcbd 100644 | |||
1634 | --- a/debian/control | |||
1635 | +++ b/debian/control | |||
1636 | @@ -26,7 +26,7 @@ Depends: bcache-tools, | |||
1637 | 26 | lvm2, | 26 | lvm2, |
1638 | 27 | mdadm, | 27 | mdadm, |
1639 | 28 | parted, | 28 | parted, |
1641 | 29 | probert, | 29 | probert-storage | probert, |
1642 | 30 | python3-curtin (= ${binary:Version}), | 30 | python3-curtin (= ${binary:Version}), |
1643 | 31 | udev, | 31 | udev, |
1644 | 32 | xfsprogs, | 32 | xfsprogs, |
1645 | diff --git a/doc/topics/config.rst b/doc/topics/config.rst | |||
1646 | index b7cca43..59e71f3 100644 | |||
1647 | --- a/doc/topics/config.rst | |||
1648 | +++ b/doc/topics/config.rst | |||
1649 | @@ -393,7 +393,8 @@ Enable rebooting with kexec. | |||
1650 | 393 | 393 | ||
1651 | 394 | **Example**:: | 394 | **Example**:: |
1652 | 395 | 395 | ||
1654 | 396 | kexec: on | 396 | kexec: |
1655 | 397 | mode: "on" | ||
1656 | 397 | 398 | ||
1657 | 398 | 399 | ||
1658 | 399 | multipath | 400 | multipath |
1659 | @@ -555,6 +556,7 @@ configures the method used to copy the image to the target system. | |||
1660 | 555 | - **dd-**: Use ``dd`` command to write image to target. | 556 | - **dd-**: Use ``dd`` command to write image to target. |
1661 | 556 | - **cp://**: Use ``rsync`` command to copy source directory to target. | 557 | - **cp://**: Use ``rsync`` command to copy source directory to target. |
1662 | 557 | - **file://**: Use ``tar`` command to extract source to target. | 558 | - **file://**: Use ``tar`` command to extract source to target. |
1663 | 559 | - **squashfs://**: Mount squashfs image and copy contents to target. | ||
1664 | 558 | - **http[s]://**: Use ``wget | tar`` commands to extract source to target. | 560 | - **http[s]://**: Use ``wget | tar`` commands to extract source to target. |
1665 | 559 | - **fsimage://** mount filesystem image and copy contents to target. | 561 | - **fsimage://** mount filesystem image and copy contents to target. |
1666 | 560 | Local file or url are supported. Filesystem can be any filesystem type | 562 | Local file or url are supported. Filesystem can be any filesystem type |
1667 | @@ -649,6 +651,9 @@ This results in Curtin downloading the following URLs:: | |||
1668 | 649 | sources: | 651 | sources: |
1669 | 650 | - cp:/// | 652 | - cp:/// |
1670 | 651 | 653 | ||
1671 | 654 | **Example squashfs from NFS mount**:: | ||
1672 | 655 | sources: | ||
1673 | 656 | - squashfs:///media/filesystem.squashfs | ||
1674 | 652 | 657 | ||
1675 | 653 | **Example Copy from local tarball**:: | 658 | **Example Copy from local tarball**:: |
1676 | 654 | 659 | ||
1677 | diff --git a/doc/topics/storage.rst b/doc/topics/storage.rst | |||
1678 | index a1346e9..c85174d 100644 | |||
1679 | --- a/doc/topics/storage.rst | |||
1680 | +++ b/doc/topics/storage.rst | |||
1681 | @@ -110,7 +110,7 @@ These ``label`` values are reserved and cannot be used: | |||
1682 | 110 | **disk_layout**: *cdl, ldl* | 110 | **disk_layout**: *cdl, ldl* |
1683 | 111 | 111 | ||
1684 | 112 | The default ``disk_layout`` value is ``cdl``, the compaible disk layout which | 112 | The default ``disk_layout`` value is ``cdl``, the compaible disk layout which |
1686 | 113 | allows for up to 3 partitions and a MBR. The ``ldl``, Linux layout has only | 113 | allows for up to 3 partitions and a VTOC. The ``ldl``, Linux layout has only |
1687 | 114 | one partition. | 114 | one partition. |
1688 | 115 | 115 | ||
1689 | 116 | 116 | ||
1690 | @@ -125,7 +125,7 @@ one partition. | |||
1691 | 125 | mode: full | 125 | mode: full |
1692 | 126 | - id: disk0 | 126 | - id: disk0 |
1693 | 127 | type: disk | 127 | type: disk |
1695 | 128 | ptable: mbr | 128 | ptable: vtoc |
1696 | 129 | serial: 0X1520 | 129 | serial: 0X1520 |
1697 | 130 | name: root_disk | 130 | name: root_disk |
1698 | 131 | wipe: superblock | 131 | wipe: superblock |
1699 | @@ -278,6 +278,14 @@ and determine which device to use as a boot disk. In cases where the boot | |||
1700 | 278 | device is on a special volume, such as a RAID array or a LVM Logical Volume, | 278 | device is on a special volume, such as a RAID array or a LVM Logical Volume, |
1701 | 279 | it may be necessary to specify the device that will hold the grub bootloader. | 279 | it may be necessary to specify the device that will hold the grub bootloader. |
1702 | 280 | 280 | ||
1703 | 281 | **multipath**: *<multipath name or serial>* | ||
1704 | 282 | |||
1705 | 283 | If a disk is a path in a multipath device, it may be included in the | ||
1706 | 284 | configuration dictionary. Currently the value is informational only. | ||
1707 | 285 | Curtin already detects whether disks are part of a multipath and selects | ||
1708 | 286 | one member path to operate upon. | ||
1709 | 287 | |||
1710 | 288 | |||
1711 | 281 | **Config Example**:: | 289 | **Config Example**:: |
1712 | 282 | 290 | ||
1713 | 283 | - id: disk0 | 291 | - id: disk0 |
1714 | @@ -374,6 +382,13 @@ For partitions, the udev rule created relies upon disk contents, in this case | |||
1715 | 374 | the partition entry UUID. This will remain in effect unless the underlying disk | 382 | the partition entry UUID. This will remain in effect unless the underlying disk |
1716 | 375 | on which the partition resides has the partition table modified or wiped. | 383 | on which the partition resides has the partition table modified or wiped. |
1717 | 376 | 384 | ||
1718 | 385 | **multipath**: *<multipath name or serial>* | ||
1719 | 386 | |||
1720 | 387 | If a partition is found on a multipath device, it may be included in the | ||
1721 | 388 | configuration dictionary. Currently the value is informational only. | ||
1722 | 389 | Curtin already detects whether partitions are part of a multipath and selects | ||
1723 | 390 | one member path to operate upon. | ||
1724 | 391 | |||
1725 | 377 | 392 | ||
1726 | 378 | **Config Example**:: | 393 | **Config Example**:: |
1727 | 379 | 394 | ||
1728 | diff --git a/examples/tests/basic-dasd.yaml b/examples/tests/basic-dasd.yaml | |||
1729 | index 62efbf0..3b0ba0d 100644 | |||
1730 | --- a/examples/tests/basic-dasd.yaml | |||
1731 | +++ b/examples/tests/basic-dasd.yaml | |||
1732 | @@ -11,14 +11,14 @@ storage: | |||
1733 | 11 | - id: sda | 11 | - id: sda |
1734 | 12 | type: disk | 12 | type: disk |
1735 | 13 | wipe: superblock | 13 | wipe: superblock |
1737 | 14 | ptable: msdos | 14 | ptable: vtoc |
1738 | 15 | model: QEMU HARDDISK | 15 | model: QEMU HARDDISK |
1739 | 16 | serial: disk-a | 16 | serial: disk-a |
1740 | 17 | grub_device: true | 17 | grub_device: true |
1741 | 18 | - id: dasdb | 18 | - id: dasdb |
1742 | 19 | type: disk | 19 | type: disk |
1743 | 20 | wipe: superblock | 20 | wipe: superblock |
1745 | 21 | ptable: msdos | 21 | ptable: vtoc |
1746 | 22 | serial: 0X1520 | 22 | serial: 0X1520 |
1747 | 23 | wipe: superblock | 23 | wipe: superblock |
1748 | 24 | - id: sda-part1 | 24 | - id: sda-part1 |
1749 | diff --git a/examples/tests/bcache-ceph-nvme-simple.yaml b/examples/tests/bcache-ceph-nvme-simple.yaml | |||
1750 | 25 | new file mode 100644 | 25 | new file mode 100644 |
1751 | index 0000000..83cb04c | |||
1752 | --- /dev/null | |||
1753 | +++ b/examples/tests/bcache-ceph-nvme-simple.yaml | |||
1754 | @@ -0,0 +1,107 @@ | |||
1755 | 1 | storage: | ||
1756 | 2 | config: | ||
1757 | 3 | - grub_device: true | ||
1758 | 4 | id: sda | ||
1759 | 5 | model: MM1000GBKAL | ||
1760 | 6 | name: sda | ||
1761 | 7 | ptable: gpt | ||
1762 | 8 | serial: disk-a | ||
1763 | 9 | type: disk | ||
1764 | 10 | wipe: superblock | ||
1765 | 11 | - id: sdb | ||
1766 | 12 | model: MM1000GBKAL | ||
1767 | 13 | name: sdb | ||
1768 | 14 | serial: disk-b | ||
1769 | 15 | type: disk | ||
1770 | 16 | wipe: superblock | ||
1771 | 17 | - id: nvme0n1 | ||
1772 | 18 | model: INTEL SSDPEDME400G4 | ||
1773 | 19 | name: nvme0n1 | ||
1774 | 20 | serial: nvme-CVMD552400 | ||
1775 | 21 | type: disk | ||
1776 | 22 | wipe: superblock | ||
1777 | 23 | - backing_device: sdb | ||
1778 | 24 | cache_device: nvme0n1 | ||
1779 | 25 | cache_mode: writeback | ||
1780 | 26 | id: bcache1 | ||
1781 | 27 | name: bcache1 | ||
1782 | 28 | type: bcache | ||
1783 | 29 | - device: sda | ||
1784 | 30 | id: sda-part1 | ||
1785 | 31 | name: sda-part1 | ||
1786 | 32 | number: 1 | ||
1787 | 33 | offset: 4194304B | ||
1788 | 34 | size: 5G | ||
1789 | 35 | type: partition | ||
1790 | 36 | uuid: 1e27e7af-26dc-4af4-9ef5-aea928204997 | ||
1791 | 37 | wipe: superblock | ||
1792 | 38 | - device: sda | ||
1793 | 39 | id: sda-part2 | ||
1794 | 40 | name: sda-part2 | ||
1795 | 41 | number: 2 | ||
1796 | 42 | size: 2G | ||
1797 | 43 | type: partition | ||
1798 | 44 | uuid: 0040d622-41f1-4596-842f-82d731ba9054 | ||
1799 | 45 | wipe: superblock | ||
1800 | 46 | - device: sda | ||
1801 | 47 | id: sda-part3 | ||
1802 | 48 | name: sda-part3 | ||
1803 | 49 | number: 3 | ||
1804 | 50 | size: 2G | ||
1805 | 51 | type: partition | ||
1806 | 52 | uuid: cb59d827-662c-4da6-b1ef-7967218bd0db | ||
1807 | 53 | wipe: superblock | ||
1808 | 54 | - backing_device: sda-part3 | ||
1809 | 55 | cache_device: nvme0n1 | ||
1810 | 56 | cache_mode: writeback | ||
1811 | 57 | id: bcache0 | ||
1812 | 58 | name: bcache0 | ||
1813 | 59 | type: bcache | ||
1814 | 60 | - fstype: fat32 | ||
1815 | 61 | id: sda-part1_format | ||
1816 | 62 | label: efi | ||
1817 | 63 | type: format | ||
1818 | 64 | uuid: 27638478-d881-43e5-a93c-1cac7aa60daa | ||
1819 | 65 | volume: sda-part1 | ||
1820 | 66 | - fstype: ext4 | ||
1821 | 67 | id: sda-part2_format | ||
1822 | 68 | label: boot | ||
1823 | 69 | type: format | ||
1824 | 70 | uuid: cfd11d4f-d77f-4307-b372-b52e81c873f7 | ||
1825 | 71 | volume: sda-part2 | ||
1826 | 72 | - fstype: ext4 | ||
1827 | 73 | id: bcache0_format | ||
1828 | 74 | label: root | ||
1829 | 75 | type: format | ||
1830 | 76 | uuid: 63247841-195c-4939-83e4-cb834d61f95f | ||
1831 | 77 | volume: bcache0 | ||
1832 | 78 | - devices: | ||
1833 | 79 | - bcache1 | ||
1834 | 80 | id: ceph-bcache-vg | ||
1835 | 81 | name: ceph-bcache-vg | ||
1836 | 82 | type: lvm_volgroup | ||
1837 | 83 | - id: ceph-bcache-lv-0 | ||
1838 | 84 | name: ceph-bcache-lv-0 | ||
1839 | 85 | size: 3G | ||
1840 | 86 | type: lvm_partition | ||
1841 | 87 | volgroup: ceph-bcache-vg | ||
1842 | 88 | - fstype: xfs | ||
1843 | 89 | id: ceph-bcache-lv-0_format | ||
1844 | 90 | volume: ceph-bcache-lv-0 | ||
1845 | 91 | type: format | ||
1846 | 92 | - device: bcache0_format | ||
1847 | 93 | id: bcache0_mount | ||
1848 | 94 | options: '' | ||
1849 | 95 | path: / | ||
1850 | 96 | type: mount | ||
1851 | 97 | - device: sda-part2_format | ||
1852 | 98 | id: sda-part2_mount | ||
1853 | 99 | options: '' | ||
1854 | 100 | path: /boot | ||
1855 | 101 | type: mount | ||
1856 | 102 | - device: sda-part1_format | ||
1857 | 103 | id: sda-part1_mount | ||
1858 | 104 | options: '' | ||
1859 | 105 | path: /boot/efi | ||
1860 | 106 | type: mount | ||
1861 | 107 | version: 1 | ||
1862 | diff --git a/examples/tests/bcache-wipe-xfs.yaml b/examples/tests/bcache-wipe-xfs.yaml | |||
1863 | index 558d442..1a181a8 100644 | |||
1864 | --- a/examples/tests/bcache-wipe-xfs.yaml | |||
1865 | +++ b/examples/tests/bcache-wipe-xfs.yaml | |||
1866 | @@ -6,9 +6,10 @@ early_commands: | |||
1867 | 6 | # would be seen as soon as the disk was partitioned and cause problems | 6 | # would be seen as soon as the disk was partitioned and cause problems |
1868 | 7 | # for curtin's use of the disk. | 7 | # for curtin's use of the disk. |
1869 | 8 | # This config recreates issue LP: #1718699 | 8 | # This config recreates issue LP: #1718699 |
1873 | 9 | 00_blockmeta: [env, -u, OUTPUT_FSTAB, TARGET_MOUNT_POINT=/tmp/my.bdir/target, | 9 | 00_blockmeta: [env, OUTPUT_FSTAB=/tmp/my.bdir/state/fstab, |
1874 | 10 | WORKING_DIR=/tmp/my.bdir/work.d, curtin, --showtrace, -v, | 10 | TARGET_MOUNT_POINT=/tmp/my.bdir/target, |
1875 | 11 | block-meta, --umount, custom] | 11 | WORKING_DIR=/tmp/my.bdir/work.d, curtin, --showtrace, -v, |
1876 | 12 | block-meta, --umount, custom] | ||
1877 | 12 | 01_clear_holders: [curtin, clear-holders, --preserve, /dev/disk/by-id/virtio-disk-b] | 13 | 01_clear_holders: [curtin, clear-holders, --preserve, /dev/disk/by-id/virtio-disk-b] |
1878 | 13 | 02_quick_erase: [curtin, block-wipe, --mode, superblock, /dev/disk/by-id/virtio-disk-b] | 14 | 02_quick_erase: [curtin, block-wipe, --mode, superblock, /dev/disk/by-id/virtio-disk-b] |
1879 | 14 | 15 | ||
1880 | diff --git a/examples/tests/bridging_network_v2.yaml b/examples/tests/bridging_network_v2.yaml | |||
1881 | 15 | new file mode 100644 | 16 | new file mode 100644 |
1882 | index 0000000..b208972 | |||
1883 | --- /dev/null | |||
1884 | +++ b/examples/tests/bridging_network_v2.yaml | |||
1885 | @@ -0,0 +1,38 @@ | |||
1886 | 1 | # v2 equivalent of examples/tests/bridging_network.yaml | ||
1887 | 2 | showtrace: true | ||
1888 | 3 | network: | ||
1889 | 4 | version: 2 | ||
1890 | 5 | ethernets: | ||
1891 | 6 | eth0: | ||
1892 | 7 | dhcp4: true | ||
1893 | 8 | match: | ||
1894 | 9 | macaddress: '52:54:00:12:34:00' | ||
1895 | 10 | set-name: eth0 | ||
1896 | 11 | eth1: | ||
1897 | 12 | match: | ||
1898 | 13 | macaddress: '52:54:00:12:34:02' | ||
1899 | 14 | set-name: eth1 | ||
1900 | 15 | eth2: | ||
1901 | 16 | match: | ||
1902 | 17 | macaddress: '52:54:00:12:34:04' | ||
1903 | 18 | set-name: eth2 | ||
1904 | 19 | bridges: | ||
1905 | 20 | br0: | ||
1906 | 21 | addresses: | ||
1907 | 22 | - 192.168.14.2/24 | ||
1908 | 23 | interfaces: | ||
1909 | 24 | - eth1 | ||
1910 | 25 | - eth2 | ||
1911 | 26 | parameters: | ||
1912 | 27 | ageing-time: 250 | ||
1913 | 28 | forward-delay: 1 | ||
1914 | 29 | hello-time: 1 | ||
1915 | 30 | max-age: 10 | ||
1916 | 31 | path-cost: | ||
1917 | 32 | eth1: 50 | ||
1918 | 33 | eth2: 75 | ||
1919 | 34 | port-priority: | ||
1920 | 35 | eth1: 28 | ||
1921 | 36 | eth2: 14 | ||
1922 | 37 | priority: 22 | ||
1923 | 38 | stp: false | ||
1924 | diff --git a/examples/tests/dirty_disks_config.yaml b/examples/tests/dirty_disks_config.yaml | |||
1925 | index bcf3fbc..2f86f9e 100644 | |||
1926 | --- a/examples/tests/dirty_disks_config.yaml | |||
1927 | +++ b/examples/tests/dirty_disks_config.yaml | |||
1928 | @@ -22,6 +22,13 @@ bucket: | |||
1929 | 22 | done | 22 | done |
1930 | 23 | swapon --show | 23 | swapon --show |
1931 | 24 | exit 0 | 24 | exit 0 |
1932 | 25 | - &multipath_on | | ||
1933 | 26 | #!/bin/sh | ||
1934 | 27 | if command -v multipath; then | ||
1935 | 28 | multipath -ll | ||
1936 | 29 | multipath -r | ||
1937 | 30 | multipath -ll | ||
1938 | 31 | fi | ||
1939 | 25 | - &zpool_export | | 32 | - &zpool_export | |
1940 | 26 | #!/bin/sh | 33 | #!/bin/sh |
1941 | 27 | # disable any rpools to trigger disks with zfs_member label but inactive | 34 | # disable any rpools to trigger disks with zfs_member label but inactive |
1942 | @@ -75,11 +82,12 @@ early_commands: | |||
1943 | 75 | # the disks exactly as in this config before the rest of the install | 82 | # the disks exactly as in this config before the rest of the install |
1944 | 76 | # will just blow it all away. We have clean out other environment | 83 | # will just blow it all away. We have clean out other environment |
1945 | 77 | # that could unintentionally mess things up. | 84 | # that could unintentionally mess things up. |
1947 | 78 | 01-blockmeta: [env, -u, OUTPUT_FSTAB, | 85 | 01-blockmeta: [env, OUTPUT_FSTAB=/tmp/my.bdir/state/fstab, |
1948 | 79 | TARGET_MOUNT_POINT=/tmp/my.bdir/target, | 86 | TARGET_MOUNT_POINT=/tmp/my.bdir/target, |
1949 | 80 | WORKING_DIR=/tmp/my.bdir/work.d, | 87 | WORKING_DIR=/tmp/my.bdir/work.d, |
1950 | 81 | curtin, --showtrace, -v, block-meta, --umount, custom] | 88 | curtin, --showtrace, -v, block-meta, --umount, custom] |
1951 | 82 | 02-enable_swaps: [sh, -c, *swapon] | 89 | 02-enable_swaps: [sh, -c, *swapon] |
1952 | 90 | 02-multipath_on: [sh, -c, *multipath_on] | ||
1953 | 83 | 03-disable_rpool: [sh, -c, *zpool_export] | 91 | 03-disable_rpool: [sh, -c, *zpool_export] |
1954 | 84 | 04-lvm_stop: [sh, -c, *lvm_stop] | 92 | 04-lvm_stop: [sh, -c, *lvm_stop] |
1955 | 85 | 05-mdadm_stop: [sh, -c, *mdadm_stop] | 93 | 05-mdadm_stop: [sh, -c, *mdadm_stop] |
1956 | diff --git a/examples/tests/network_mtu_networkd.yaml b/examples/tests/network_mtu_networkd.yaml | |||
1957 | 86 | new file mode 100644 | 94 | new file mode 100644 |
1958 | index 0000000..e2ac444 | |||
1959 | --- /dev/null | |||
1960 | +++ b/examples/tests/network_mtu_networkd.yaml | |||
1961 | @@ -0,0 +1,93 @@ | |||
1962 | 1 | showtrace: true | ||
1963 | 2 | network: | ||
1964 | 3 | version: 1 | ||
1965 | 4 | config: | ||
1966 | 5 | - type: physical | ||
1967 | 6 | name: interface0 | ||
1968 | 7 | mac_address: "52:54:00:12:34:00" | ||
1969 | 8 | subnets: | ||
1970 | 9 | - type: static | ||
1971 | 10 | address: 192.168.1.2/24 | ||
1972 | 11 | mtu: 1601 | ||
1973 | 12 | - type: static | ||
1974 | 13 | address: 2001:4800:78ff:1b:be76:4eff:fe06:1000 | ||
1975 | 14 | netmask: 'ffff:ffff:ffff:ffff::' | ||
1976 | 15 | mtu: 1501 | ||
1977 | 16 | - type: physical | ||
1978 | 17 | name: interface1 | ||
1979 | 18 | mac_address: "52:54:00:12:34:02" | ||
1980 | 19 | subnets: | ||
1981 | 20 | - type: static | ||
1982 | 21 | address: 192.168.2.2/24 | ||
1983 | 22 | mtu: 1501 | ||
1984 | 23 | - type: static | ||
1985 | 24 | address: 2001:4800:78ff:1b:be76:4eff:fe06:2000 | ||
1986 | 25 | netmask: 'ffff:ffff:ffff:ffff::' | ||
1987 | 26 | mtu: 1501 | ||
1988 | 27 | - type: physical | ||
1989 | 28 | name: interface2 | ||
1990 | 29 | mac_address: "52:54:00:12:34:04" | ||
1991 | 30 | subnets: | ||
1992 | 31 | - type: dhcp | ||
1993 | 32 | - type: physical | ||
1994 | 33 | name: interface4 | ||
1995 | 34 | mac_address: "52:54:00:12:34:08" | ||
1996 | 35 | subnets: | ||
1997 | 36 | - type: static | ||
1998 | 37 | address: 2001:4800:78ff:1b:be76:4eff:fe06:5000 | ||
1999 | 38 | netmask: 'ffff:ffff:ffff:ffff::' | ||
2000 | 39 | mtu: 8900 | ||
2001 | 40 | - type: static | ||
2002 | 41 | address: 192.168.5.2/24 | ||
2003 | 42 | mtu: 9000 | ||
2004 | 43 | - type: physical | ||
2005 | 44 | name: interface5 | ||
2006 | 45 | mac_address: "52:54:00:12:34:0c" | ||
2007 | 46 | subnets: | ||
2008 | 47 | - type: static | ||
2009 | 48 | address: 2001:4800:78ff:1b:be76:4eff:fe06:6000 | ||
2010 | 49 | netmask: 'ffff:ffff:ffff:ffff::' | ||
2011 | 50 | mtu: 1480 | ||
2012 | 51 | - type: static | ||
2013 | 52 | address: 192.168.6.2/24 | ||
2014 | 53 | mtu: 1480 | ||
2015 | 54 | |||
2016 | 55 | write_files: | ||
2017 | 56 | capture_mtu: | ||
2018 | 57 | path: '/usr/local/bin/capture-mtu' | ||
2019 | 58 | permissions: '0755' | ||
2020 | 59 | owner: 'root:root' | ||
2021 | 60 | content: | | ||
2022 | 61 | #!/bin/sh | ||
2023 | 62 | for x in 0 1 2 4 5; do | ||
2024 | 63 | dev_mtu=$(cat /sys/class/net/interface${x}/mtu) | ||
2025 | 64 | ipv6_mtu=$(cat /proc/sys/net/ipv6/conf/interface${x}/mtu) | ||
2026 | 65 | sys=$(sysctl net.ipv6.conf.interface${x}.mtu) | ||
2027 | 66 | echo "WARK: interface${x} dev_mtu=$dev_mtu proc_ipv6_mtu=$ipv6_mtu" | ||
2028 | 67 | echo "WARK: $sys" | ||
2029 | 68 | done | ||
2030 | 69 | |||
2031 | 70 | bucket: | ||
2032 | 71 | - &networkd_debug | | ||
2033 | 72 | #!/bin/sh | ||
2034 | 73 | MP=$TARGET_MOUNT_POINT | ||
2035 | 74 | mkdir -p "${MP}/etc/systemd/system/systemd-networkd.service.d" | ||
2036 | 75 | conf="${MP}/etc/systemd/system/systemd-networkd.service.d/10-debug.conf" | ||
2037 | 76 | echo "[Service]" >$conf | ||
2038 | 77 | echo "Environment=SYSTEMD_LOG_LEVEL=debug" >>$conf | ||
2039 | 78 | echo "ExecStartPost=/usr/local/bin/capture-mtu" >>$conf | ||
2040 | 79 | exit 0 | ||
2041 | 80 | |||
2042 | 81 | - &capture_mtu | | ||
2043 | 82 | #!/bin/sh -x | ||
2044 | 83 | MP=$TARGET_MOUNT_POINT | ||
2045 | 84 | for service in cloud-init-local cloud-init cloud-config; do | ||
2046 | 85 | mkdir -p "${MP}/etc/systemd/system/${service}.service.d" | ||
2047 | 86 | conf="${MP}/etc/systemd/system/${service}.service.d/10-debug.conf" | ||
2048 | 87 | echo "[Service]" >$conf | ||
2049 | 88 | echo "ExecStartPre=/usr/local/bin/capture-mtu" >>$conf | ||
2050 | 89 | done | ||
2051 | 90 | |||
2052 | 91 | late_commands: | ||
2053 | 92 | 01-networkd_debug: [sh, -c, *networkd_debug] | ||
2054 | 93 | 02-capture_mtu: [sh, -c, *capture_mtu] | ||
2055 | diff --git a/examples/tests/reuse-raid-member-partition.yaml b/examples/tests/reuse-raid-member-partition.yaml | |||
2056 | 0 | new file mode 100644 | 94 | new file mode 100644 |
2057 | index 0000000..3fe2d83 | |||
2058 | --- /dev/null | |||
2059 | +++ b/examples/tests/reuse-raid-member-partition.yaml | |||
2060 | @@ -0,0 +1,73 @@ | |||
2061 | 1 | showtrace: true | ||
2062 | 2 | |||
2063 | 3 | # The point of this test is to test installing to a partition that used to | ||
2064 | 4 | # be a RAID member where the other disks that used to be part of the | ||
2065 | 5 | # RAID are not present (the scenario that the disk was just grabbed | ||
2066 | 6 | # out of a pile of previously used disks and shoved into a server). | ||
2067 | 7 | |||
2068 | 8 | # So what it does is to create a RAID0 out of two partition from two | ||
2069 | 9 | # disks, stop the RAID, wipe one of the disks and then install to the | ||
2070 | 10 | # other, reusing the partition that was part of the RAID. | ||
2071 | 11 | |||
2072 | 12 | bucket: | ||
2073 | 13 | - &setup | | ||
2074 | 14 | parted /dev/disk/by-id/virtio-disk-a --script -- \ | ||
2075 | 15 | mklabel gpt \ | ||
2076 | 16 | mkpart primary 1GiB 2GiB \ | ||
2077 | 17 | mkpart primary 2GiB 9GiB | ||
2078 | 18 | parted /dev/disk/by-id/virtio-disk-b --script -- \ | ||
2079 | 19 | mklabel gpt \ | ||
2080 | 20 | mkpart primary 2GiB 9GiB | ||
2081 | 21 | udevadm settle | ||
2082 | 22 | mdadm --create --metadata 1.2 --level 0 -n 2 /dev/md1 --assume-clean \ | ||
2083 | 23 | /dev/disk/by-id/virtio-disk-a-part2 /dev/disk/by-id/virtio-disk-b-part1 | ||
2084 | 24 | udevadm settle | ||
2085 | 25 | mdadm --stop /dev/md1 | ||
2086 | 26 | udevadm settle | ||
2087 | 27 | mdadm --zero-superblock /dev/disk/by-id/virtio-disk-b-part1 | ||
2088 | 28 | wipefs -a /dev/disk/by-id/virtio-disk-b | ||
2089 | 29 | udevadm settle | ||
2090 | 30 | |||
2091 | 31 | early_commands: | ||
2092 | 32 | 00-setup-raid: [sh, -exuc, *setup] | ||
2093 | 33 | |||
2094 | 34 | storage: | ||
2095 | 35 | config: | ||
2096 | 36 | - type: disk | ||
2097 | 37 | id: id_disk0 | ||
2098 | 38 | serial: disk-a | ||
2099 | 39 | ptable: gpt | ||
2100 | 40 | preserve: true | ||
2101 | 41 | - type: disk | ||
2102 | 42 | id: id_disk1 | ||
2103 | 43 | serial: disk-b | ||
2104 | 44 | - type: partition | ||
2105 | 45 | id: id_disk0_part1 | ||
2106 | 46 | preserve: true | ||
2107 | 47 | device: id_disk0 | ||
2108 | 48 | flag: boot | ||
2109 | 49 | number: 1 | ||
2110 | 50 | size: 1G | ||
2111 | 51 | - type: partition | ||
2112 | 52 | id: id_disk0_part2 | ||
2113 | 53 | preserve: true | ||
2114 | 54 | device: id_disk0 | ||
2115 | 55 | number: 2 | ||
2116 | 56 | size: 7G | ||
2117 | 57 | - type: format | ||
2118 | 58 | id: id_efi_format | ||
2119 | 59 | volume: id_disk0_part1 | ||
2120 | 60 | fstype: fat32 | ||
2121 | 61 | - type: format | ||
2122 | 62 | id: id_root_format | ||
2123 | 63 | volume: id_disk0_part2 | ||
2124 | 64 | fstype: ext4 | ||
2125 | 65 | - type: mount | ||
2126 | 66 | device: id_root_format | ||
2127 | 67 | id: id_root_mount | ||
2128 | 68 | path: / | ||
2129 | 69 | - type: mount | ||
2130 | 70 | id: id_efi_mount | ||
2131 | 71 | device: id_efi_format | ||
2132 | 72 | path: /boot/efi | ||
2133 | 73 | version: 1 | ||
2134 | diff --git a/examples/tests/reuse-raid-member-wipe.yaml b/examples/tests/reuse-raid-member-wipe.yaml | |||
2135 | 0 | new file mode 100644 | 74 | new file mode 100644 |
2136 | index 0000000..84a2686 | |||
2137 | --- /dev/null | |||
2138 | +++ b/examples/tests/reuse-raid-member-wipe.yaml | |||
2139 | @@ -0,0 +1,71 @@ | |||
2140 | 1 | showtrace: true | ||
2141 | 2 | |||
2142 | 3 | # The point of this test is to test installing to a disk that contains | ||
2143 | 4 | # a partition that used to be a RAID member where the other parts of | ||
2144 | 5 | # the RAID are not present (the scenario is that the disk was just | ||
2145 | 6 | # grabbed out of a pile of previously used disks and shoved into a | ||
2146 | 7 | # server). | ||
2147 | 8 | |||
2148 | 9 | # So what it does is to create a RAID0 out of partitions on two disks, | ||
2149 | 10 | # stop the RAID, wipe the superblock on one of them and then install | ||
2150 | 11 | # to the other using a standard partitioning scheme. | ||
2151 | 12 | |||
2152 | 13 | bucket: | ||
2153 | 14 | - &setup | | ||
2154 | 15 | parted /dev/disk/by-id/virtio-disk-a --script -- \ | ||
2155 | 16 | mklabel gpt \ | ||
2156 | 17 | mkpart primary 1GiB 9GiB | ||
2157 | 18 | parted /dev/disk/by-id/virtio-disk-b --script -- \ | ||
2158 | 19 | mklabel gpt \ | ||
2159 | 20 | mkpart primary 1GiB 9GiB | ||
2160 | 21 | udevadm settle | ||
2161 | 22 | mdadm --create --metadata 1.2 --level 0 -n 2 /dev/md1 --assume-clean \ | ||
2162 | 23 | /dev/disk/by-id/virtio-disk-a-part1 /dev/disk/by-id/virtio-disk-b-part1 | ||
2163 | 24 | udevadm settle | ||
2164 | 25 | mdadm --stop /dev/md1 | ||
2165 | 26 | udevadm settle | ||
2166 | 27 | mdadm --zero-superblock /dev/disk/by-id/virtio-disk-b-part1 | ||
2167 | 28 | wipefs -a /dev/disk/by-id/virtio-disk-b | ||
2168 | 29 | udevadm settle | ||
2169 | 30 | |||
2170 | 31 | early_commands: | ||
2171 | 32 | 00-setup-raid: [sh, -exuc, *setup] | ||
2172 | 33 | |||
2173 | 34 | storage: | ||
2174 | 35 | config: | ||
2175 | 36 | - type: disk | ||
2176 | 37 | id: id_disk0 | ||
2177 | 38 | serial: disk-a | ||
2178 | 39 | ptable: gpt | ||
2179 | 40 | wipe: superblock-recursive | ||
2180 | 41 | - type: disk | ||
2181 | 42 | id: id_disk1 | ||
2182 | 43 | serial: disk-b | ||
2183 | 44 | - type: partition | ||
2184 | 45 | id: id_disk0_part1 | ||
2185 | 46 | device: id_disk0 | ||
2186 | 47 | flag: boot | ||
2187 | 48 | number: 1 | ||
2188 | 49 | size: 512M | ||
2189 | 50 | - type: partition | ||
2190 | 51 | id: id_disk0_part2 | ||
2191 | 52 | device: id_disk0 | ||
2192 | 53 | number: 2 | ||
2193 | 54 | size: 8G | ||
2194 | 55 | - type: format | ||
2195 | 56 | id: id_efi_format | ||
2196 | 57 | volume: id_disk0_part1 | ||
2197 | 58 | fstype: fat32 | ||
2198 | 59 | - type: format | ||
2199 | 60 | id: id_root_format | ||
2200 | 61 | volume: id_disk0_part2 | ||
2201 | 62 | fstype: ext4 | ||
2202 | 63 | - type: mount | ||
2203 | 64 | device: id_root_format | ||
2204 | 65 | id: id_root_mount | ||
2205 | 66 | path: / | ||
2206 | 67 | - type: mount | ||
2207 | 68 | id: id_efi_mount | ||
2208 | 69 | device: id_efi_format | ||
2209 | 70 | path: /boot/efi | ||
2210 | 71 | version: 1 | ||
2211 | diff --git a/helpers/common b/helpers/common | |||
2212 | index 5928150..6c8e4f0 100644 | |||
2213 | --- a/helpers/common | |||
2214 | +++ b/helpers/common | |||
2215 | @@ -679,7 +679,7 @@ install_grub() { | |||
2216 | 679 | 679 | ||
2217 | 680 | # grub is not the bootloader you are looking for | 680 | # grub is not the bootloader you are looking for |
2218 | 681 | if [ "${target_arch}" = "s390x" ]; then | 681 | if [ "${target_arch}" = "s390x" ]; then |
2220 | 682 | return 0; | 682 | return 0; |
2221 | 683 | fi | 683 | fi |
2222 | 684 | 684 | ||
2223 | 685 | # set correct grub package | 685 | # set correct grub package |
2224 | @@ -694,7 +694,7 @@ install_grub() { | |||
2225 | 694 | x86_64) | 694 | x86_64) |
2226 | 695 | case $rhel_ver in | 695 | case $rhel_ver in |
2227 | 696 | 6) grub_name="grub";; | 696 | 6) grub_name="grub";; |
2229 | 697 | 7) grub_name="grub2-pc";; | 697 | 7|8) grub_name="grub2-pc";; |
2230 | 698 | *) | 698 | *) |
2231 | 699 | error "Unknown rhel_ver [$rhel_ver]"; | 699 | error "Unknown rhel_ver [$rhel_ver]"; |
2232 | 700 | return 1; | 700 | return 1; |
2233 | @@ -711,7 +711,10 @@ install_grub() { | |||
2234 | 711 | case "$target_arch" in | 711 | case "$target_arch" in |
2235 | 712 | x86_64) | 712 | x86_64) |
2236 | 713 | # centos 7+, no centos6 support | 713 | # centos 7+, no centos6 support |
2238 | 714 | grub_name="grub2-efi-x64-modules" | 714 | # grub2-efi-x64 installs a signed grub bootloader while |
2239 | 715 | # curtin uses grub2-efi-x64-modules to generate grubx64.efi. | ||
2240 | 716 | # Either works just check that one of them is installed. | ||
2241 | 717 | grub_name="grub2-efi-x64 grub2-efi-x64-modules" | ||
2242 | 715 | grub_target="x86_64-efi" | 718 | grub_target="x86_64-efi" |
2243 | 716 | ;; | 719 | ;; |
2244 | 717 | amd64) | 720 | amd64) |
2245 | @@ -739,11 +742,13 @@ install_grub() { | |||
2246 | 739 | error "failed to check if $grub_name installed"; | 742 | error "failed to check if $grub_name installed"; |
2247 | 740 | return 1; | 743 | return 1; |
2248 | 741 | fi | 744 | fi |
2254 | 742 | case "$tmp" in | 745 | # Check that any of the packages in $grub_name are installed. If |
2255 | 743 | install\ ok\ installed) :;; | 746 | # grub_name contains multiple packages, as it does for CentOS 7+, |
2256 | 744 | *) debug 1 "$grub_name not installed, not doing anything"; | 747 | # only one package has to be installed for this to pass. |
2257 | 745 | return 1;; | 748 | if ! echo $tmp | grep -q 'install ok installed'; then |
2258 | 746 | esac | 749 | debug 1 "$grub_name not installed, not doing anything" |
2259 | 750 | return 1 | ||
2260 | 751 | fi | ||
2261 | 747 | 752 | ||
2262 | 748 | local grub_d="etc/default/grub.d" | 753 | local grub_d="etc/default/grub.d" |
2263 | 749 | # ubuntu writes to /etc/default/grub.d/50-curtin-settings.cfg | 754 | # ubuntu writes to /etc/default/grub.d/50-curtin-settings.cfg |
2264 | @@ -822,11 +827,31 @@ install_grub() { | |||
2265 | 822 | if [ "$update_nvram" -ge 1 ]; then | 827 | if [ "$update_nvram" -ge 1 ]; then |
2266 | 823 | nvram="" | 828 | nvram="" |
2267 | 824 | fi | 829 | fi |
2268 | 830 | if [ "${#grubdevs_new[@]}" -eq 1 ] && [ -f "${grubdevs_new[0]}" ]; then | ||
2269 | 831 | # Currently UEFI can only be pointed to one system partition. If | ||
2270 | 832 | # for some reason multiple install locations are given only use the | ||
2271 | 833 | # first. | ||
2272 | 834 | efi_dev="${grubdevs_new[0]}" | ||
2273 | 835 | elif [ "${#grubdevs_new[@]}" -gt 1 ]; then | ||
2274 | 836 | error "Only one grub device supported on UEFI!" | ||
2275 | 837 | exit 1 | ||
2276 | 838 | else | ||
2277 | 839 | # If no storage configuration was given try to determine the system | ||
2278 | 840 | # partition. | ||
2279 | 841 | efi_dev=$(awk -v "MP=${mp}/boot/efi" '$2 == MP { print $1 }' /proc/mounts) | ||
2280 | 842 | fi | ||
2281 | 843 | # The partition number of block device name need to be determined here | ||
2282 | 844 | # so both getting the UEFI device from Curtin config and discovering it | ||
2283 | 845 | # work. | ||
2284 | 846 | efi_part_num=$(cat /sys/class/block/$(basename $efi_dev)/partition) | ||
2285 | 847 | efi_disk="/dev/$(lsblk -no pkname $efi_dev)" | ||
2286 | 825 | debug 1 "curtin uefi: installing ${grub_name} to: /boot/efi" | 848 | debug 1 "curtin uefi: installing ${grub_name} to: /boot/efi" |
2287 | 826 | chroot "$mp" env DEBIAN_FRONTEND=noninteractive sh -exc ' | 849 | chroot "$mp" env DEBIAN_FRONTEND=noninteractive sh -exc ' |
2288 | 827 | echo "before grub-install efiboot settings" | 850 | echo "before grub-install efiboot settings" |
2289 | 828 | efibootmgr -v || echo "WARN: efibootmgr exited $?" | 851 | efibootmgr -v || echo "WARN: efibootmgr exited $?" |
2290 | 829 | bootid="$4" | 852 | bootid="$4" |
2291 | 853 | efi_disk="$5" | ||
2292 | 854 | efi_part_num="$6" | ||
2293 | 830 | grubpost="" | 855 | grubpost="" |
2294 | 831 | case $bootid in | 856 | case $bootid in |
2295 | 832 | debian|ubuntu) | 857 | debian|ubuntu) |
2296 | @@ -836,7 +861,15 @@ install_grub() { | |||
2297 | 836 | ;; | 861 | ;; |
2298 | 837 | centos|redhat|rhel) | 862 | centos|redhat|rhel) |
2299 | 838 | grubcmd="grub2-install" | 863 | grubcmd="grub2-install" |
2301 | 839 | grubpost="grub2-mkconfig -o /boot/grub2/grub.cfg" | 864 | # RHEL uses redhat instead of the os_variant rhel for the bootid. |
2302 | 865 | if [ "$bootid" = "rhel" ]; then | ||
2303 | 866 | bootid="redhat" | ||
2304 | 867 | fi | ||
2305 | 868 | if [ -f /boot/efi/EFI/$bootid/grubx64.efi ]; then | ||
2306 | 869 | grubpost="grub2-mkconfig -o /boot/efi/EFI/$bootid/grub.cfg" | ||
2307 | 870 | else | ||
2308 | 871 | grubpost="grub2-mkconfig -o /boot/grub2/grub.cfg" | ||
2309 | 872 | fi | ||
2310 | 840 | ;; | 873 | ;; |
2311 | 841 | *) | 874 | *) |
2312 | 842 | echo "Unsupported OS: $bootid" 1>&2 | 875 | echo "Unsupported OS: $bootid" 1>&2 |
2313 | @@ -852,10 +885,45 @@ install_grub() { | |||
2314 | 852 | echo "$gi_out" | grep -q -- "$no_nvram" || no_nvram="" | 885 | echo "$gi_out" | grep -q -- "$no_nvram" || no_nvram="" |
2315 | 853 | echo "$gi_out" | grep -q -- "--target" || target="" | 886 | echo "$gi_out" | grep -q -- "--target" || target="" |
2316 | 854 | echo "$gi_out" | grep -q -- "--efi-directory" || efi_dir="" | 887 | echo "$gi_out" | grep -q -- "--efi-directory" || efi_dir="" |
2319 | 855 | $grubcmd $target $efi_dir \ | 888 | |
2320 | 856 | --bootloader-id=$bootid --recheck $no_nvram | 889 | # Do not overwrite grubx64.efi if it already exists. grub-install |
2321 | 890 | # generates grubx64.efi and overwrites any existing binary in | ||
2322 | 891 | # /boot/efi/EFI/$bootid. This binary is not signed and will cause | ||
2323 | 892 | # secure boot to fail. | ||
2324 | 893 | # | ||
2325 | 894 | # CentOS, RHEL, Fedora ship the signed boot loader in the package | ||
2326 | 895 | # grub2-efi-x64 which installs the signed boot loader to | ||
2327 | 896 | # /boot/efi/EFI/$bootid/grubx64.efi. All Curtin has to do is | ||
2328 | 897 | # configure the firmware. This mirrors what Anaconda does. | ||
2329 | 898 | # | ||
2330 | 899 | # Debian and Ubuntu come with a patched version of grub which | ||
2331 | 900 | # add the install flag --uefi-secure-boot which is enabled by | ||
2332 | 901 | # default. When enabled if a signed version of grub exists on | ||
2333 | 902 | # the filesystem it will be copied into /boot/efi/EFI/$bootid. | ||
2334 | 903 | # Stock Ubuntu images do not ship with anything in /boot. Those | ||
2335 | 904 | # files are generated by installing a kernel and grub. | ||
2336 | 905 | if [ -f /boot/efi/EFI/$bootid/grubx64.efi ]; then | ||
2337 | 906 | if [ -z "$no_nvram" ]; then | ||
2338 | 907 | # UEFI firmware should be pointed to the shim if available to | ||
2339 | 908 | # enable secure boot. | ||
2340 | 909 | for boot_uefi in \ | ||
2341 | 910 | /boot/efi/EFI/$bootid/shimx64.efi \ | ||
2342 | 911 | /boot/efi/EFI/BOOT/BOOTX64.EFI \ | ||
2343 | 912 | /boot/efi/EFI/$bootid/grubx64.efi; do | ||
2344 | 913 | if [ -f $boot_uefi ]; then | ||
2345 | 914 | break | ||
2346 | 915 | fi | ||
2347 | 916 | done | ||
2348 | 917 | loader=$(echo ${boot_uefi##/boot/efi} | sed "s|/|\\\|g") | ||
2349 | 918 | efibootmgr --create --write-signature --label $bootid \ | ||
2350 | 919 | --disk $efi_disk --part $efi_part_num --loader $loader | ||
2351 | 920 | fi | ||
2352 | 921 | else | ||
2353 | 922 | $grubcmd $target $efi_dir \ | ||
2354 | 923 | --bootloader-id=$bootid --recheck $no_nvram | ||
2355 | 924 | fi | ||
2356 | 857 | [ -z "$grubpost" ] || $grubpost;' \ | 925 | [ -z "$grubpost" ] || $grubpost;' \ |
2358 | 858 | -- "${grub_name}" "${grub_target}" "$nvram" "$os_variant" </dev/null || | 926 | -- "$grub_name" "$grub_target" "$nvram" "$os_variant" "$efi_disk" "$efi_part_num" </dev/null || |
2359 | 859 | { error "failed to install grub!"; return 1; } | 927 | { error "failed to install grub!"; return 1; } |
2360 | 860 | 928 | ||
2361 | 861 | chroot "$mp" sh -exc ' | 929 | chroot "$mp" sh -exc ' |
2362 | @@ -885,8 +953,11 @@ install_grub() { | |||
2363 | 885 | centos|redhat|rhel) | 953 | centos|redhat|rhel) |
2364 | 886 | case $bootver in | 954 | case $bootver in |
2365 | 887 | 6) grubcmd="grub-install";; | 955 | 6) grubcmd="grub-install";; |
2367 | 888 | 7) grubcmd="grub2-install" | 956 | 7|8) grubcmd="grub2-install" |
2368 | 889 | grubpost="grub2-mkconfig -o /boot/grub2/grub.cfg";; | 957 | grubpost="grub2-mkconfig -o /boot/grub2/grub.cfg";; |
2369 | 958 | *) | ||
2370 | 959 | echo "Unknown rhel_ver [$bootver]" | ||
2371 | 960 | exit 1 | ||
2372 | 890 | esac | 961 | esac |
2373 | 891 | ;; | 962 | ;; |
2374 | 892 | *) | 963 | *) |
2375 | diff --git a/tests/data/probert_storage_multipath.json b/tests/data/probert_storage_multipath.json | |||
2376 | 893 | new file mode 100644 | 964 | new file mode 100644 |
2377 | index 0000000..53d9f93 | |||
2378 | --- /dev/null | |||
2379 | +++ b/tests/data/probert_storage_multipath.json | |||
2380 | @@ -0,0 +1,1059 @@ | |||
2381 | 1 | { | ||
2382 | 2 | "lvm": {}, | ||
2383 | 3 | "raid": {}, | ||
2384 | 4 | "filesystem": { | ||
2385 | 5 | "/dev/sr0": { | ||
2386 | 6 | "BOOT_SYSTEM_ID": "EL\\x20TORITO\\x20SPECIFICATION", | ||
2387 | 7 | "LABEL": "Ubuntu-Server_19.10_amd64", | ||
2388 | 8 | "LABEL_ENC": "Ubuntu-Server\\x2019.10\\x20amd64", | ||
2389 | 9 | "TYPE": "iso9660", | ||
2390 | 10 | "USAGE": "filesystem", | ||
2391 | 11 | "UUID": "2019-08-11-07-41-33-00", | ||
2392 | 12 | "UUID_ENC": "2019-08-11-07-41-33-00", | ||
2393 | 13 | "VERSION": "Joliet Extension" | ||
2394 | 14 | }, | ||
2395 | 15 | "/dev/sda2": { | ||
2396 | 16 | "TYPE": "ext4", | ||
2397 | 17 | "USAGE": "filesystem", | ||
2398 | 18 | "UUID": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
2399 | 19 | "UUID_ENC": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
2400 | 20 | "VERSION": "1.0" | ||
2401 | 21 | }, | ||
2402 | 22 | "/dev/sdb2": { | ||
2403 | 23 | "TYPE": "ext4", | ||
2404 | 24 | "USAGE": "filesystem", | ||
2405 | 25 | "UUID": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
2406 | 26 | "UUID_ENC": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
2407 | 27 | "VERSION": "1.0" | ||
2408 | 28 | }, | ||
2409 | 29 | "/dev/dm-2": { | ||
2410 | 30 | "TYPE": "ext4", | ||
2411 | 31 | "USAGE": "filesystem", | ||
2412 | 32 | "UUID": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
2413 | 33 | "UUID_ENC": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
2414 | 34 | "VERSION": "1.0" | ||
2415 | 35 | } | ||
2416 | 36 | }, | ||
2417 | 37 | "mount": [ | ||
2418 | 38 | { | ||
2419 | 39 | "target": "/", | ||
2420 | 40 | "source": "/cow", | ||
2421 | 41 | "fstype": "overlay", | ||
2422 | 42 | "options": "rw,relatime,lowerdir=//installer.squashfs://filesystem.squashfs,upperdir=/cow/upper,workdir=/cow/work", | ||
2423 | 43 | "children": [ | ||
2424 | 44 | { | ||
2425 | 45 | "target": "/sys", | ||
2426 | 46 | "source": "sysfs", | ||
2427 | 47 | "fstype": "sysfs", | ||
2428 | 48 | "options": "rw,nosuid,nodev,noexec,relatime", | ||
2429 | 49 | "children": [ | ||
2430 | 50 | { | ||
2431 | 51 | "target": "/sys/kernel/security", | ||
2432 | 52 | "source": "securityfs", | ||
2433 | 53 | "fstype": "securityfs", | ||
2434 | 54 | "options": "rw,nosuid,nodev,noexec,relatime" | ||
2435 | 55 | }, | ||
2436 | 56 | { | ||
2437 | 57 | "target": "/sys/fs/cgroup", | ||
2438 | 58 | "source": "tmpfs", | ||
2439 | 59 | "fstype": "tmpfs", | ||
2440 | 60 | "options": "ro,nosuid,nodev,noexec,mode=755", | ||
2441 | 61 | "children": [ | ||
2442 | 62 | { | ||
2443 | 63 | "target": "/sys/fs/cgroup/unified", | ||
2444 | 64 | "source": "cgroup2", | ||
2445 | 65 | "fstype": "cgroup2", | ||
2446 | 66 | "options": "rw,nosuid,nodev,noexec,relatime,nsdelegate" | ||
2447 | 67 | }, | ||
2448 | 68 | { | ||
2449 | 69 | "target": "/sys/fs/cgroup/systemd", | ||
2450 | 70 | "source": "cgroup", | ||
2451 | 71 | "fstype": "cgroup", | ||
2452 | 72 | "options": "rw,nosuid,nodev,noexec,relatime,xattr,name=systemd" | ||
2453 | 73 | }, | ||
2454 | 74 | { | ||
2455 | 75 | "target": "/sys/fs/cgroup/cpu,cpuacct", | ||
2456 | 76 | "source": "cgroup", | ||
2457 | 77 | "fstype": "cgroup", | ||
2458 | 78 | "options": "rw,nosuid,nodev,noexec,relatime,cpu,cpuacct" | ||
2459 | 79 | }, | ||
2460 | 80 | { | ||
2461 | 81 | "target": "/sys/fs/cgroup/devices", | ||
2462 | 82 | "source": "cgroup", | ||
2463 | 83 | "fstype": "cgroup", | ||
2464 | 84 | "options": "rw,nosuid,nodev,noexec,relatime,devices" | ||
2465 | 85 | }, | ||
2466 | 86 | { | ||
2467 | 87 | "target": "/sys/fs/cgroup/perf_event", | ||
2468 | 88 | "source": "cgroup", | ||
2469 | 89 | "fstype": "cgroup", | ||
2470 | 90 | "options": "rw,nosuid,nodev,noexec,relatime,perf_event" | ||
2471 | 91 | }, | ||
2472 | 92 | { | ||
2473 | 93 | "target": "/sys/fs/cgroup/hugetlb", | ||
2474 | 94 | "source": "cgroup", | ||
2475 | 95 | "fstype": "cgroup", | ||
2476 | 96 | "options": "rw,nosuid,nodev,noexec,relatime,hugetlb" | ||
2477 | 97 | }, | ||
2478 | 98 | { | ||
2479 | 99 | "target": "/sys/fs/cgroup/rdma", | ||
2480 | 100 | "source": "cgroup", | ||
2481 | 101 | "fstype": "cgroup", | ||
2482 | 102 | "options": "rw,nosuid,nodev,noexec,relatime,rdma" | ||
2483 | 103 | }, | ||
2484 | 104 | { | ||
2485 | 105 | "target": "/sys/fs/cgroup/net_cls,net_prio", | ||
2486 | 106 | "source": "cgroup", | ||
2487 | 107 | "fstype": "cgroup", | ||
2488 | 108 | "options": "rw,nosuid,nodev,noexec,relatime,net_cls,net_prio" | ||
2489 | 109 | }, | ||
2490 | 110 | { | ||
2491 | 111 | "target": "/sys/fs/cgroup/freezer", | ||
2492 | 112 | "source": "cgroup", | ||
2493 | 113 | "fstype": "cgroup", | ||
2494 | 114 | "options": "rw,nosuid,nodev,noexec,relatime,freezer" | ||
2495 | 115 | }, | ||
2496 | 116 | { | ||
2497 | 117 | "target": "/sys/fs/cgroup/cpuset", | ||
2498 | 118 | "source": "cgroup", | ||
2499 | 119 | "fstype": "cgroup", | ||
2500 | 120 | "options": "rw,nosuid,nodev,noexec,relatime,cpuset" | ||
2501 | 121 | }, | ||
2502 | 122 | { | ||
2503 | 123 | "target": "/sys/fs/cgroup/memory", | ||
2504 | 124 | "source": "cgroup", | ||
2505 | 125 | "fstype": "cgroup", | ||
2506 | 126 | "options": "rw,nosuid,nodev,noexec,relatime,memory" | ||
2507 | 127 | }, | ||
2508 | 128 | { | ||
2509 | 129 | "target": "/sys/fs/cgroup/blkio", | ||
2510 | 130 | "source": "cgroup", | ||
2511 | 131 | "fstype": "cgroup", | ||
2512 | 132 | "options": "rw,nosuid,nodev,noexec,relatime,blkio" | ||
2513 | 133 | }, | ||
2514 | 134 | { | ||
2515 | 135 | "target": "/sys/fs/cgroup/pids", | ||
2516 | 136 | "source": "cgroup", | ||
2517 | 137 | "fstype": "cgroup", | ||
2518 | 138 | "options": "rw,nosuid,nodev,noexec,relatime,pids" | ||
2519 | 139 | } | ||
2520 | 140 | ] | ||
2521 | 141 | }, | ||
2522 | 142 | { | ||
2523 | 143 | "target": "/sys/fs/pstore", | ||
2524 | 144 | "source": "pstore", | ||
2525 | 145 | "fstype": "pstore", | ||
2526 | 146 | "options": "rw,nosuid,nodev,noexec,relatime" | ||
2527 | 147 | }, | ||
2528 | 148 | { | ||
2529 | 149 | "target": "/sys/fs/bpf", | ||
2530 | 150 | "source": "bpf", | ||
2531 | 151 | "fstype": "bpf", | ||
2532 | 152 | "options": "rw,nosuid,nodev,noexec,relatime,mode=700" | ||
2533 | 153 | }, | ||
2534 | 154 | { | ||
2535 | 155 | "target": "/sys/kernel/debug", | ||
2536 | 156 | "source": "debugfs", | ||
2537 | 157 | "fstype": "debugfs", | ||
2538 | 158 | "options": "rw,relatime" | ||
2539 | 159 | }, | ||
2540 | 160 | { | ||
2541 | 161 | "target": "/sys/kernel/config", | ||
2542 | 162 | "source": "configfs", | ||
2543 | 163 | "fstype": "configfs", | ||
2544 | 164 | "options": "rw,relatime" | ||
2545 | 165 | }, | ||
2546 | 166 | { | ||
2547 | 167 | "target": "/sys/fs/fuse/connections", | ||
2548 | 168 | "source": "fusectl", | ||
2549 | 169 | "fstype": "fusectl", | ||
2550 | 170 | "options": "rw,relatime" | ||
2551 | 171 | } | ||
2552 | 172 | ] | ||
2553 | 173 | }, | ||
2554 | 174 | { | ||
2555 | 175 | "target": "/proc", | ||
2556 | 176 | "source": "proc", | ||
2557 | 177 | "fstype": "proc", | ||
2558 | 178 | "options": "rw,nosuid,nodev,noexec,relatime", | ||
2559 | 179 | "children": [ | ||
2560 | 180 | { | ||
2561 | 181 | "target": "/proc/sys/fs/binfmt_misc", | ||
2562 | 182 | "source": "systemd-1", | ||
2563 | 183 | "fstype": "autofs", | ||
2564 | 184 | "options": "rw,relatime,fd=28,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13765" | ||
2565 | 185 | } | ||
2566 | 186 | ] | ||
2567 | 187 | }, | ||
2568 | 188 | { | ||
2569 | 189 | "target": "/dev", | ||
2570 | 190 | "source": "udev", | ||
2571 | 191 | "fstype": "devtmpfs", | ||
2572 | 192 | "options": "rw,nosuid,relatime,size=462516k,nr_inodes=115629,mode=755", | ||
2573 | 193 | "children": [ | ||
2574 | 194 | { | ||
2575 | 195 | "target": "/dev/pts", | ||
2576 | 196 | "source": "devpts", | ||
2577 | 197 | "fstype": "devpts", | ||
2578 | 198 | "options": "rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000" | ||
2579 | 199 | }, | ||
2580 | 200 | { | ||
2581 | 201 | "target": "/dev/shm", | ||
2582 | 202 | "source": "tmpfs", | ||
2583 | 203 | "fstype": "tmpfs", | ||
2584 | 204 | "options": "rw,nosuid,nodev" | ||
2585 | 205 | }, | ||
2586 | 206 | { | ||
2587 | 207 | "target": "/dev/hugepages", | ||
2588 | 208 | "source": "hugetlbfs", | ||
2589 | 209 | "fstype": "hugetlbfs", | ||
2590 | 210 | "options": "rw,relatime,pagesize=2M" | ||
2591 | 211 | }, | ||
2592 | 212 | { | ||
2593 | 213 | "target": "/dev/mqueue", | ||
2594 | 214 | "source": "mqueue", | ||
2595 | 215 | "fstype": "mqueue", | ||
2596 | 216 | "options": "rw,relatime" | ||
2597 | 217 | } | ||
2598 | 218 | ] | ||
2599 | 219 | }, | ||
2600 | 220 | { | ||
2601 | 221 | "target": "/run", | ||
2602 | 222 | "source": "tmpfs", | ||
2603 | 223 | "fstype": "tmpfs", | ||
2604 | 224 | "options": "rw,nosuid,noexec,relatime,size=100568k,mode=755", | ||
2605 | 225 | "children": [ | ||
2606 | 226 | { | ||
2607 | 227 | "target": "/run/lock", | ||
2608 | 228 | "source": "tmpfs", | ||
2609 | 229 | "fstype": "tmpfs", | ||
2610 | 230 | "options": "rw,nosuid,nodev,noexec,relatime,size=5120k" | ||
2611 | 231 | } | ||
2612 | 232 | ] | ||
2613 | 233 | }, | ||
2614 | 234 | { | ||
2615 | 235 | "target": "/cdrom", | ||
2616 | 236 | "source": "/dev/sr0", | ||
2617 | 237 | "fstype": "iso9660", | ||
2618 | 238 | "options": "ro,noatime,nojoliet,check=s,map=n,blocksize=2048" | ||
2619 | 239 | }, | ||
2620 | 240 | { | ||
2621 | 241 | "target": "/rofs", | ||
2622 | 242 | "source": "/dev/loop0", | ||
2623 | 243 | "fstype": "squashfs", | ||
2624 | 244 | "options": "ro,noatime" | ||
2625 | 245 | }, | ||
2626 | 246 | { | ||
2627 | 247 | "target": "/usr/lib/modules", | ||
2628 | 248 | "source": "/dev/loop2", | ||
2629 | 249 | "fstype": "squashfs", | ||
2630 | 250 | "options": "ro,relatime" | ||
2631 | 251 | }, | ||
2632 | 252 | { | ||
2633 | 253 | "target": "/media/filesystem", | ||
2634 | 254 | "source": "/dev/loop0", | ||
2635 | 255 | "fstype": "squashfs", | ||
2636 | 256 | "options": "ro,relatime" | ||
2637 | 257 | }, | ||
2638 | 258 | { | ||
2639 | 259 | "target": "/tmp", | ||
2640 | 260 | "source": "tmpfs", | ||
2641 | 261 | "fstype": "tmpfs", | ||
2642 | 262 | "options": "rw,nosuid,nodev,relatime" | ||
2643 | 263 | }, | ||
2644 | 264 | { | ||
2645 | 265 | "target": "/snap/core/7270", | ||
2646 | 266 | "source": "/dev/loop3", | ||
2647 | 267 | "fstype": "squashfs", | ||
2648 | 268 | "options": "ro,nodev,relatime" | ||
2649 | 269 | }, | ||
2650 | 270 | { | ||
2651 | 271 | "target": "/snap/subiquity/1093", | ||
2652 | 272 | "source": "/dev/loop4", | ||
2653 | 273 | "fstype": "squashfs", | ||
2654 | 274 | "options": "ro,nodev,relatime" | ||
2655 | 275 | } | ||
2656 | 276 | ] | ||
2657 | 277 | } | ||
2658 | 278 | ], | ||
2659 | 279 | "multipath": { | ||
2660 | 280 | "maps": [ | ||
2661 | 281 | { | ||
2662 | 282 | "multipath": "30000000000000064", | ||
2663 | 283 | "sysfs": "dm-0", | ||
2664 | 284 | "paths": "2" | ||
2665 | 285 | } | ||
2666 | 286 | ], | ||
2667 | 287 | "paths": [ | ||
2668 | 288 | { | ||
2669 | 289 | "device": "sda", | ||
2670 | 290 | "serial": "serial-a", | ||
2671 | 291 | "multipath": "mpatha", | ||
2672 | 292 | "host_wwnn": "[undef]", | ||
2673 | 293 | "target_wwnn": "[undef]", | ||
2674 | 294 | "host_wwpn": "[undef]", | ||
2675 | 295 | "target_wwpn": "[undef]", | ||
2676 | 296 | "host_adapter": "[undef]" | ||
2677 | 297 | }, | ||
2678 | 298 | { | ||
2679 | 299 | "device": "sdb", | ||
2680 | 300 | "serial": "serial-a", | ||
2681 | 301 | "multipath": "mpatha", | ||
2682 | 302 | "host_wwnn": "[undef]", | ||
2683 | 303 | "target_wwnn": "[undef]", | ||
2684 | 304 | "host_wwpn": "[undef]", | ||
2685 | 305 | "target_wwpn": "[undef]", | ||
2686 | 306 | "host_adapter": "[undef]" | ||
2687 | 307 | } | ||
2688 | 308 | ] | ||
2689 | 309 | }, | ||
2690 | 310 | "dmcrypt": {}, | ||
2691 | 311 | "blockdev": { | ||
2692 | 312 | "/dev/sr0": { | ||
2693 | 313 | "DEVLINKS": "/dev/disk/by-label/Ubuntu-Server\\x2019.10\\x20amd64 /dev/dvd /dev/disk/by-uuid/2019-08-11-07-41-33-00 /dev/disk/by-id/ata-QEMU_DVD-ROM_QM00003 /dev/cdrom /dev/disk/by-path/pci-0000:00:01.1-ata-2", | ||
2694 | 314 | "DEVNAME": "/dev/sr0", | ||
2695 | 315 | "DEVPATH": "/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/block/sr0", | ||
2696 | 316 | "DEVTYPE": "disk", | ||
2697 | 317 | "ID_ATA": "1", | ||
2698 | 318 | "ID_BUS": "ata", | ||
2699 | 319 | "ID_CDROM": "1", | ||
2700 | 320 | "ID_CDROM_DVD": "1", | ||
2701 | 321 | "ID_CDROM_MEDIA": "1", | ||
2702 | 322 | "ID_CDROM_MEDIA_CD": "1", | ||
2703 | 323 | "ID_CDROM_MEDIA_SESSION_COUNT": "1", | ||
2704 | 324 | "ID_CDROM_MEDIA_TRACK_COUNT": "1", | ||
2705 | 325 | "ID_CDROM_MEDIA_TRACK_COUNT_DATA": "1", | ||
2706 | 326 | "ID_CDROM_MRW": "1", | ||
2707 | 327 | "ID_CDROM_MRW_W": "1", | ||
2708 | 328 | "ID_FOR_SEAT": "block-pci-0000_00_01_1-ata-2", | ||
2709 | 329 | "ID_FS_BOOT_SYSTEM_ID": "EL\\x20TORITO\\x20SPECIFICATION", | ||
2710 | 330 | "ID_FS_LABEL": "Ubuntu-Server_19.10_amd64", | ||
2711 | 331 | "ID_FS_LABEL_ENC": "Ubuntu-Server\\x2019.10\\x20amd64", | ||
2712 | 332 | "ID_FS_TYPE": "iso9660", | ||
2713 | 333 | "ID_FS_USAGE": "filesystem", | ||
2714 | 334 | "ID_FS_UUID": "2019-08-11-07-41-33-00", | ||
2715 | 335 | "ID_FS_UUID_ENC": "2019-08-11-07-41-33-00", | ||
2716 | 336 | "ID_FS_VERSION": "Joliet Extension", | ||
2717 | 337 | "ID_MODEL": "QEMU_DVD-ROM", | ||
2718 | 338 | "ID_MODEL_ENC": "QEMU\\x20DVD-ROM\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20", | ||
2719 | 339 | "ID_PART_TABLE_TYPE": "dos", | ||
2720 | 340 | "ID_PART_TABLE_UUID": "6612a5ed", | ||
2721 | 341 | "ID_PATH": "pci-0000:00:01.1-ata-2", | ||
2722 | 342 | "ID_PATH_TAG": "pci-0000_00_01_1-ata-2", | ||
2723 | 343 | "ID_REVISION": "2.5+", | ||
2724 | 344 | "ID_SCSI": "1", | ||
2725 | 345 | "ID_SCSI_INQUIRY": "1", | ||
2726 | 346 | "ID_SERIAL": "QEMU_DVD-ROM_QM00003", | ||
2727 | 347 | "ID_SERIAL_SHORT": "QM00003", | ||
2728 | 348 | "ID_TYPE": "cd", | ||
2729 | 349 | "ID_VENDOR": "QEMU", | ||
2730 | 350 | "ID_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
2731 | 351 | "MAJOR": "11", | ||
2732 | 352 | "MINOR": "0", | ||
2733 | 353 | "SCSI_MODEL": "QEMU_DVD-ROM", | ||
2734 | 354 | "SCSI_MODEL_ENC": "QEMU\\x20DVD-ROM\\x20\\x20\\x20\\x20", | ||
2735 | 355 | "SCSI_REVISION": "2.5+", | ||
2736 | 356 | "SCSI_TPGS": "0", | ||
2737 | 357 | "SCSI_TYPE": "cd/dvd", | ||
2738 | 358 | "SCSI_VENDOR": "QEMU", | ||
2739 | 359 | "SCSI_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
2740 | 360 | "SUBSYSTEM": "block", | ||
2741 | 361 | "SYSTEMD_MOUNT_DEVICE_BOUND": "1", | ||
2742 | 362 | "TAGS": ":systemd:uaccess:seat:", | ||
2743 | 363 | "USEC_INITIALIZED": "1162968", | ||
2744 | 364 | "attrs": { | ||
2745 | 365 | "alignment_offset": "0", | ||
2746 | 366 | "bdi": null, | ||
2747 | 367 | "capability": "119", | ||
2748 | 368 | "dev": "11:0", | ||
2749 | 369 | "device": null, | ||
2750 | 370 | "discard_alignment": "0", | ||
2751 | 371 | "events": "media_change eject_request", | ||
2752 | 372 | "events_async": "", | ||
2753 | 373 | "events_poll_msecs": "-1", | ||
2754 | 374 | "ext_range": "1", | ||
2755 | 375 | "hidden": "0", | ||
2756 | 376 | "inflight": " 0 0", | ||
2757 | 377 | "range": "1", | ||
2758 | 378 | "removable": "1", | ||
2759 | 379 | "ro": "0", | ||
2760 | 380 | "size": "2881486848", | ||
2761 | 381 | "stat": " 3177 16 427476 210179 0 0 0 0 0 6880 207800 0 0 0 0", | ||
2762 | 382 | "subsystem": "block", | ||
2763 | 383 | "uevent": "MAJOR=11\nMINOR=0\nDEVNAME=sr0\nDEVTYPE=disk" | ||
2764 | 384 | }, | ||
2765 | 385 | "partitiontable": { | ||
2766 | 386 | "label": "dos", | ||
2767 | 387 | "id": "0x6612a5ed", | ||
2768 | 388 | "device": "/dev/sr0", | ||
2769 | 389 | "unit": "sectors", | ||
2770 | 390 | "partitions": [ | ||
2771 | 391 | { | ||
2772 | 392 | "node": "/dev/sr0p1", | ||
2773 | 393 | "start": 0, | ||
2774 | 394 | "size": 1406976, | ||
2775 | 395 | "type": "0", | ||
2776 | 396 | "bootable": true | ||
2777 | 397 | }, | ||
2778 | 398 | { | ||
2779 | 399 | "node": "/dev/sr0p2", | ||
2780 | 400 | "start": 790864, | ||
2781 | 401 | "size": 7936, | ||
2782 | 402 | "type": "ef" | ||
2783 | 403 | } | ||
2784 | 404 | ] | ||
2785 | 405 | } | ||
2786 | 406 | }, | ||
2787 | 407 | "/dev/sda": { | ||
2788 | 408 | "DEVLINKS": "/dev/disk/by-id/scsi-30000000000000064 /dev/disk/by-path/pci-0000:00:04.0-scsi-0:0:0:0 /dev/disk/by-id/scsi-SQEMU_QEMU_HARDDISK_serial-a /dev/disk/by-id/wwn-0x0000000000000064 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_serial-a", | ||
2789 | 409 | "DEVNAME": "/dev/sda", | ||
2790 | 410 | "DEVPATH": "/devices/pci0000:00/0000:00:04.0/virtio0/host2/target2:0:0/2:0:0:0/block/sda", | ||
2791 | 411 | "DEVTYPE": "disk", | ||
2792 | 412 | "DM_DEL_PART_NODES": "1", | ||
2793 | 413 | "DM_MULTIPATH_DEVICE_PATH": "1", | ||
2794 | 414 | "ID_BUS": "scsi", | ||
2795 | 415 | "ID_FS_TYPE": "mpath_member", | ||
2796 | 416 | "ID_MODEL": "QEMU_HARDDISK", | ||
2797 | 417 | "ID_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
2798 | 418 | "ID_PART_TABLE_TYPE": "gpt", | ||
2799 | 419 | "ID_PART_TABLE_UUID": "8261cd75-2234-4dbd-920a-d21a7c083c94", | ||
2800 | 420 | "ID_PATH": "pci-0000:00:04.0-scsi-0:0:0:0", | ||
2801 | 421 | "ID_PATH_TAG": "pci-0000_00_04_0-scsi-0_0_0_0", | ||
2802 | 422 | "ID_REVISION": "2.5+", | ||
2803 | 423 | "ID_SCSI": "1", | ||
2804 | 424 | "ID_SCSI_INQUIRY": "1", | ||
2805 | 425 | "ID_SERIAL": "30000000000000064", | ||
2806 | 426 | "ID_SERIAL_SHORT": "0000000000000064", | ||
2807 | 427 | "ID_TYPE": "disk", | ||
2808 | 428 | "ID_VENDOR": "QEMU", | ||
2809 | 429 | "ID_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
2810 | 430 | "ID_WWN": "0x0000000000000064", | ||
2811 | 431 | "ID_WWN_WITH_EXTENSION": "0x0000000000000064", | ||
2812 | 432 | "MAJOR": "8", | ||
2813 | 433 | "MINOR": "0", | ||
2814 | 434 | "MPATH_SBIN_PATH": "/sbin", | ||
2815 | 435 | "SCSI_IDENT_LUN_NAA_LOCAL": "0000000000000064", | ||
2816 | 436 | "SCSI_IDENT_LUN_VENDOR": "serial-a", | ||
2817 | 437 | "SCSI_IDENT_SERIAL": "serial-a", | ||
2818 | 438 | "SCSI_MODEL": "QEMU_HARDDISK", | ||
2819 | 439 | "SCSI_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
2820 | 440 | "SCSI_REVISION": "2.5+", | ||
2821 | 441 | "SCSI_TPGS": "0", | ||
2822 | 442 | "SCSI_TYPE": "disk", | ||
2823 | 443 | "SCSI_VENDOR": "QEMU", | ||
2824 | 444 | "SCSI_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
2825 | 445 | "SUBSYSTEM": "block", | ||
2826 | 446 | "SYSTEMD_READY": "0", | ||
2827 | 447 | "TAGS": ":systemd:", | ||
2828 | 448 | "USEC_INITIALIZED": "1357719", | ||
2829 | 449 | "attrs": { | ||
2830 | 450 | "alignment_offset": "0", | ||
2831 | 451 | "bdi": null, | ||
2832 | 452 | "capability": "50", | ||
2833 | 453 | "dev": "8:0", | ||
2834 | 454 | "device": null, | ||
2835 | 455 | "discard_alignment": "0", | ||
2836 | 456 | "events": "", | ||
2837 | 457 | "events_async": "", | ||
2838 | 458 | "events_poll_msecs": "-1", | ||
2839 | 459 | "ext_range": "256", | ||
2840 | 460 | "hidden": "0", | ||
2841 | 461 | "inflight": " 0 0", | ||
2842 | 462 | "range": "16", | ||
2843 | 463 | "removable": "0", | ||
2844 | 464 | "ro": "0", | ||
2845 | 465 | "size": "10737418240", | ||
2846 | 466 | "stat": " 820 0 37338 127 0 0 0 0 0 452 4 0 0 0 0", | ||
2847 | 467 | "subsystem": "block", | ||
2848 | 468 | "uevent": "MAJOR=8\nMINOR=0\nDEVNAME=sda\nDEVTYPE=disk" | ||
2849 | 469 | }, | ||
2850 | 470 | "partitiontable": { | ||
2851 | 471 | "label": "gpt", | ||
2852 | 472 | "id": "8261CD75-2234-4DBD-920A-D21A7C083C94", | ||
2853 | 473 | "device": "/dev/sda", | ||
2854 | 474 | "unit": "sectors", | ||
2855 | 475 | "firstlba": 34, | ||
2856 | 476 | "lastlba": 20971486, | ||
2857 | 477 | "partitions": [ | ||
2858 | 478 | { | ||
2859 | 479 | "node": "/dev/sda1", | ||
2860 | 480 | "start": 2048, | ||
2861 | 481 | "size": 2048, | ||
2862 | 482 | "type": "21686148-6449-6E6F-744E-656564454649", | ||
2863 | 483 | "uuid": "8088175C-362A-4B46-9603-F3595065FA73" | ||
2864 | 484 | }, | ||
2865 | 485 | { | ||
2866 | 486 | "node": "/dev/sda2", | ||
2867 | 487 | "start": 4096, | ||
2868 | 488 | "size": 20965376, | ||
2869 | 489 | "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4", | ||
2870 | 490 | "uuid": "760493AC-7945-44C5-A6BD-58FCD6632EA7" | ||
2871 | 491 | } | ||
2872 | 492 | ] | ||
2873 | 493 | } | ||
2874 | 494 | }, | ||
2875 | 495 | "/dev/sda1": { | ||
2876 | 496 | "DEVLINKS": "/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_serial-a-part1 /dev/disk/by-id/scsi-30000000000000064-part1 /dev/disk/by-path/pci-0000:00:04.0-scsi-0:0:0:0-part1 /dev/disk/by-id/scsi-SQEMU_QEMU_HARDDISK_serial-a-part1 /dev/disk/by-partuuid/8088175c-362a-4b46-9603-f3595065fa73 /dev/disk/by-id/wwn-0x0000000000000064-part1", | ||
2877 | 497 | "DEVNAME": "/dev/sda1", | ||
2878 | 498 | "DEVPATH": "/devices/pci0000:00/0000:00:04.0/virtio0/host2/target2:0:0/2:0:0:0/block/sda/sda1", | ||
2879 | 499 | "DEVTYPE": "partition", | ||
2880 | 500 | "DM_MULTIPATH_DEVICE_PATH": "1", | ||
2881 | 501 | "ID_BUS": "scsi", | ||
2882 | 502 | "ID_FS_TYPE": "mpath_member", | ||
2883 | 503 | "ID_MODEL": "QEMU_HARDDISK", | ||
2884 | 504 | "ID_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
2885 | 505 | "ID_PART_ENTRY_DISK": "8:0", | ||
2886 | 506 | "ID_PART_ENTRY_NUMBER": "1", | ||
2887 | 507 | "ID_PART_ENTRY_OFFSET": "2048", | ||
2888 | 508 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
2889 | 509 | "ID_PART_ENTRY_SIZE": "2048", | ||
2890 | 510 | "ID_PART_ENTRY_TYPE": "21686148-6449-6e6f-744e-656564454649", | ||
2891 | 511 | "ID_PART_ENTRY_UUID": "8088175c-362a-4b46-9603-f3595065fa73", | ||
2892 | 512 | "ID_PART_TABLE_TYPE": "gpt", | ||
2893 | 513 | "ID_PART_TABLE_UUID": "8261cd75-2234-4dbd-920a-d21a7c083c94", | ||
2894 | 514 | "ID_PATH": "pci-0000:00:04.0-scsi-0:0:0:0", | ||
2895 | 515 | "ID_PATH_TAG": "pci-0000_00_04_0-scsi-0_0_0_0", | ||
2896 | 516 | "ID_REVISION": "2.5+", | ||
2897 | 517 | "ID_SCSI": "1", | ||
2898 | 518 | "ID_SCSI_INQUIRY": "1", | ||
2899 | 519 | "ID_SERIAL": "30000000000000064", | ||
2900 | 520 | "ID_SERIAL_SHORT": "0000000000000064", | ||
2901 | 521 | "ID_TYPE": "disk", | ||
2902 | 522 | "ID_VENDOR": "QEMU", | ||
2903 | 523 | "ID_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
2904 | 524 | "ID_WWN": "0x0000000000000064", | ||
2905 | 525 | "ID_WWN_WITH_EXTENSION": "0x0000000000000064", | ||
2906 | 526 | "MAJOR": "8", | ||
2907 | 527 | "MINOR": "1", | ||
2908 | 528 | "PARTN": "1", | ||
2909 | 529 | "SCSI_IDENT_LUN_NAA_LOCAL": "0000000000000064", | ||
2910 | 530 | "SCSI_IDENT_LUN_VENDOR": "serial-a", | ||
2911 | 531 | "SCSI_IDENT_SERIAL": "serial-a", | ||
2912 | 532 | "SCSI_MODEL": "QEMU_HARDDISK", | ||
2913 | 533 | "SCSI_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
2914 | 534 | "SCSI_REVISION": "2.5+", | ||
2915 | 535 | "SCSI_TPGS": "0", | ||
2916 | 536 | "SCSI_TYPE": "disk", | ||
2917 | 537 | "SCSI_VENDOR": "QEMU", | ||
2918 | 538 | "SCSI_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
2919 | 539 | "SUBSYSTEM": "block", | ||
2920 | 540 | "SYSTEMD_READY": "0", | ||
2921 | 541 | "TAGS": ":systemd:", | ||
2922 | 542 | "USEC_INITIALIZED": "1409047", | ||
2923 | 543 | "attrs": { | ||
2924 | 544 | "alignment_offset": "0", | ||
2925 | 545 | "dev": "8:1", | ||
2926 | 546 | "discard_alignment": "0", | ||
2927 | 547 | "inflight": " 0 0", | ||
2928 | 548 | "partition": "1", | ||
2929 | 549 | "ro": "0", | ||
2930 | 550 | "size": "1048576", | ||
2931 | 551 | "start": "2048", | ||
2932 | 552 | "stat": " 167 0 1360 14 0 0 0 0 0 172 0 0 0 0 0", | ||
2933 | 553 | "subsystem": "block", | ||
2934 | 554 | "uevent": "MAJOR=8\nMINOR=1\nDEVNAME=sda1\nDEVTYPE=partition\nPARTN=1" | ||
2935 | 555 | } | ||
2936 | 556 | }, | ||
2937 | 557 | "/dev/sda2": { | ||
2938 | 558 | "DEVLINKS": "/dev/disk/by-id/wwn-0x0000000000000064-part2 /dev/disk/by-id/scsi-SQEMU_QEMU_HARDDISK_serial-a-part2 /dev/disk/by-uuid/80ca57a0-60b7-4328-be41-afedf915effd /dev/disk/by-partuuid/760493ac-7945-44c5-a6bd-58fcd6632ea7 /dev/disk/by-path/pci-0000:00:04.0-scsi-0:0:0:0-part2 /dev/disk/by-id/scsi-30000000000000064-part2 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_serial-a-part2", | ||
2939 | 559 | "DEVNAME": "/dev/sda2", | ||
2940 | 560 | "DEVPATH": "/devices/pci0000:00/0000:00:04.0/virtio0/host2/target2:0:0/2:0:0:0/block/sda/sda2", | ||
2941 | 561 | "DEVTYPE": "partition", | ||
2942 | 562 | "DM_MULTIPATH_DEVICE_PATH": "1", | ||
2943 | 563 | "ID_BUS": "scsi", | ||
2944 | 564 | "ID_FS_TYPE": "ext4", | ||
2945 | 565 | "ID_FS_USAGE": "filesystem", | ||
2946 | 566 | "ID_FS_UUID": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
2947 | 567 | "ID_FS_UUID_ENC": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
2948 | 568 | "ID_FS_VERSION": "1.0", | ||
2949 | 569 | "ID_MODEL": "QEMU_HARDDISK", | ||
2950 | 570 | "ID_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
2951 | 571 | "ID_PART_ENTRY_DISK": "8:0", | ||
2952 | 572 | "ID_PART_ENTRY_NUMBER": "2", | ||
2953 | 573 | "ID_PART_ENTRY_OFFSET": "4096", | ||
2954 | 574 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
2955 | 575 | "ID_PART_ENTRY_SIZE": "20965376", | ||
2956 | 576 | "ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4", | ||
2957 | 577 | "ID_PART_ENTRY_UUID": "760493ac-7945-44c5-a6bd-58fcd6632ea7", | ||
2958 | 578 | "ID_PART_TABLE_TYPE": "gpt", | ||
2959 | 579 | "ID_PART_TABLE_UUID": "8261cd75-2234-4dbd-920a-d21a7c083c94", | ||
2960 | 580 | "ID_PATH": "pci-0000:00:04.0-scsi-0:0:0:0", | ||
2961 | 581 | "ID_PATH_TAG": "pci-0000_00_04_0-scsi-0_0_0_0", | ||
2962 | 582 | "ID_REVISION": "2.5+", | ||
2963 | 583 | "ID_SCSI": "1", | ||
2964 | 584 | "ID_SCSI_INQUIRY": "1", | ||
2965 | 585 | "ID_SERIAL": "30000000000000064", | ||
2966 | 586 | "ID_SERIAL_SHORT": "0000000000000064", | ||
2967 | 587 | "ID_TYPE": "disk", | ||
2968 | 588 | "ID_VENDOR": "QEMU", | ||
2969 | 589 | "ID_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
2970 | 590 | "ID_WWN": "0x0000000000000064", | ||
2971 | 591 | "ID_WWN_WITH_EXTENSION": "0x0000000000000064", | ||
2972 | 592 | "MAJOR": "8", | ||
2973 | 593 | "MINOR": "2", | ||
2974 | 594 | "PARTN": "2", | ||
2975 | 595 | "SCSI_IDENT_LUN_NAA_LOCAL": "0000000000000064", | ||
2976 | 596 | "SCSI_IDENT_LUN_VENDOR": "serial-a", | ||
2977 | 597 | "SCSI_IDENT_SERIAL": "serial-a", | ||
2978 | 598 | "SCSI_MODEL": "QEMU_HARDDISK", | ||
2979 | 599 | "SCSI_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
2980 | 600 | "SCSI_REVISION": "2.5+", | ||
2981 | 601 | "SCSI_TPGS": "0", | ||
2982 | 602 | "SCSI_TYPE": "disk", | ||
2983 | 603 | "SCSI_VENDOR": "QEMU", | ||
2984 | 604 | "SCSI_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
2985 | 605 | "SUBSYSTEM": "block", | ||
2986 | 606 | "SYSTEMD_READY": "0", | ||
2987 | 607 | "TAGS": ":systemd:", | ||
2988 | 608 | "USEC_INITIALIZED": "1364238", | ||
2989 | 609 | "attrs": { | ||
2990 | 610 | "alignment_offset": "0", | ||
2991 | 611 | "dev": "8:2", | ||
2992 | 612 | "discard_alignment": "0", | ||
2993 | 613 | "inflight": " 0 0", | ||
2994 | 614 | "partition": "2", | ||
2995 | 615 | "ro": "0", | ||
2996 | 616 | "size": "10734272512", | ||
2997 | 617 | "start": "4096", | ||
2998 | 618 | "stat": " 268 0 17138 61 0 0 0 0 0 156 4 0 0 0 0", | ||
2999 | 619 | "subsystem": "block", | ||
3000 | 620 | "uevent": "MAJOR=8\nMINOR=2\nDEVNAME=sda2\nDEVTYPE=partition\nPARTN=2" | ||
3001 | 621 | } | ||
3002 | 622 | }, | ||
3003 | 623 | "/dev/sdb": { | ||
3004 | 624 | "DEVLINKS": "/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_serial-a /dev/disk/by-id/scsi-30000000000000064 /dev/disk/by-id/wwn-0x0000000000000064 /dev/disk/by-path/pci-0000:00:04.0-scsi-0:0:1:0 /dev/disk/by-id/scsi-SQEMU_QEMU_HARDDISK_serial-a", | ||
3005 | 625 | "DEVNAME": "/dev/sdb", | ||
3006 | 626 | "DEVPATH": "/devices/pci0000:00/0000:00:04.0/virtio0/host2/target2:0:1/2:0:1:0/block/sdb", | ||
3007 | 627 | "DEVTYPE": "disk", | ||
3008 | 628 | "DM_DEL_PART_NODES": "1", | ||
3009 | 629 | "DM_MULTIPATH_DEVICE_PATH": "1", | ||
3010 | 630 | "ID_BUS": "scsi", | ||
3011 | 631 | "ID_FS_TYPE": "mpath_member", | ||
3012 | 632 | "ID_MODEL": "QEMU_HARDDISK", | ||
3013 | 633 | "ID_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
3014 | 634 | "ID_PART_TABLE_TYPE": "gpt", | ||
3015 | 635 | "ID_PART_TABLE_UUID": "8261cd75-2234-4dbd-920a-d21a7c083c94", | ||
3016 | 636 | "ID_PATH": "pci-0000:00:04.0-scsi-0:0:1:0", | ||
3017 | 637 | "ID_PATH_TAG": "pci-0000_00_04_0-scsi-0_0_1_0", | ||
3018 | 638 | "ID_REVISION": "2.5+", | ||
3019 | 639 | "ID_SCSI": "1", | ||
3020 | 640 | "ID_SCSI_INQUIRY": "1", | ||
3021 | 641 | "ID_SERIAL": "30000000000000064", | ||
3022 | 642 | "ID_SERIAL_SHORT": "0000000000000064", | ||
3023 | 643 | "ID_TYPE": "disk", | ||
3024 | 644 | "ID_VENDOR": "QEMU", | ||
3025 | 645 | "ID_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
3026 | 646 | "ID_WWN": "0x0000000000000064", | ||
3027 | 647 | "ID_WWN_WITH_EXTENSION": "0x0000000000000064", | ||
3028 | 648 | "MAJOR": "8", | ||
3029 | 649 | "MINOR": "16", | ||
3030 | 650 | "MPATH_SBIN_PATH": "/sbin", | ||
3031 | 651 | "SCSI_IDENT_LUN_NAA_LOCAL": "0000000000000064", | ||
3032 | 652 | "SCSI_IDENT_LUN_VENDOR": "serial-a", | ||
3033 | 653 | "SCSI_IDENT_SERIAL": "serial-a", | ||
3034 | 654 | "SCSI_MODEL": "QEMU_HARDDISK", | ||
3035 | 655 | "SCSI_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
3036 | 656 | "SCSI_REVISION": "2.5+", | ||
3037 | 657 | "SCSI_TPGS": "0", | ||
3038 | 658 | "SCSI_TYPE": "disk", | ||
3039 | 659 | "SCSI_VENDOR": "QEMU", | ||
3040 | 660 | "SCSI_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
3041 | 661 | "SUBSYSTEM": "block", | ||
3042 | 662 | "SYSTEMD_READY": "0", | ||
3043 | 663 | "TAGS": ":systemd:", | ||
3044 | 664 | "USEC_INITIALIZED": "1342677", | ||
3045 | 665 | "attrs": { | ||
3046 | 666 | "alignment_offset": "0", | ||
3047 | 667 | "bdi": null, | ||
3048 | 668 | "capability": "50", | ||
3049 | 669 | "dev": "8:16", | ||
3050 | 670 | "device": null, | ||
3051 | 671 | "discard_alignment": "0", | ||
3052 | 672 | "events": "", | ||
3053 | 673 | "events_async": "", | ||
3054 | 674 | "events_poll_msecs": "-1", | ||
3055 | 675 | "ext_range": "256", | ||
3056 | 676 | "hidden": "0", | ||
3057 | 677 | "inflight": " 0 0", | ||
3058 | 678 | "range": "16", | ||
3059 | 679 | "removable": "0", | ||
3060 | 680 | "ro": "0", | ||
3061 | 681 | "size": "10737418240", | ||
3062 | 682 | "stat": " 460 0 20312 70 0 0 0 0 0 280 12 0 0 0 0", | ||
3063 | 683 | "subsystem": "block", | ||
3064 | 684 | "uevent": "MAJOR=8\nMINOR=16\nDEVNAME=sdb\nDEVTYPE=disk" | ||
3065 | 685 | }, | ||
3066 | 686 | "partitiontable": { | ||
3067 | 687 | "label": "gpt", | ||
3068 | 688 | "id": "8261CD75-2234-4DBD-920A-D21A7C083C94", | ||
3069 | 689 | "device": "/dev/sdb", | ||
3070 | 690 | "unit": "sectors", | ||
3071 | 691 | "firstlba": 34, | ||
3072 | 692 | "lastlba": 20971486, | ||
3073 | 693 | "partitions": [ | ||
3074 | 694 | { | ||
3075 | 695 | "node": "/dev/sdb1", | ||
3076 | 696 | "start": 2048, | ||
3077 | 697 | "size": 2048, | ||
3078 | 698 | "type": "21686148-6449-6E6F-744E-656564454649", | ||
3079 | 699 | "uuid": "8088175C-362A-4B46-9603-F3595065FA73" | ||
3080 | 700 | }, | ||
3081 | 701 | { | ||
3082 | 702 | "node": "/dev/sdb2", | ||
3083 | 703 | "start": 4096, | ||
3084 | 704 | "size": 20965376, | ||
3085 | 705 | "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4", | ||
3086 | 706 | "uuid": "760493AC-7945-44C5-A6BD-58FCD6632EA7" | ||
3087 | 707 | } | ||
3088 | 708 | ] | ||
3089 | 709 | } | ||
3090 | 710 | }, | ||
3091 | 711 | "/dev/sdb1": { | ||
3092 | 712 | "DEVLINKS": "/dev/disk/by-path/pci-0000:00:04.0-scsi-0:0:1:0-part1 /dev/disk/by-id/scsi-30000000000000064-part1 /dev/disk/by-partuuid/8088175c-362a-4b46-9603-f3595065fa73 /dev/disk/by-id/scsi-SQEMU_QEMU_HARDDISK_serial-a-part1 /dev/disk/by-id/wwn-0x0000000000000064-part1 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_serial-a-part1", | ||
3093 | 713 | "DEVNAME": "/dev/sdb1", | ||
3094 | 714 | "DEVPATH": "/devices/pci0000:00/0000:00:04.0/virtio0/host2/target2:0:1/2:0:1:0/block/sdb/sdb1", | ||
3095 | 715 | "DEVTYPE": "partition", | ||
3096 | 716 | "DM_MULTIPATH_DEVICE_PATH": "1", | ||
3097 | 717 | "ID_BUS": "scsi", | ||
3098 | 718 | "ID_FS_TYPE": "mpath_member", | ||
3099 | 719 | "ID_MODEL": "QEMU_HARDDISK", | ||
3100 | 720 | "ID_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
3101 | 721 | "ID_PART_ENTRY_DISK": "8:16", | ||
3102 | 722 | "ID_PART_ENTRY_NUMBER": "1", | ||
3103 | 723 | "ID_PART_ENTRY_OFFSET": "2048", | ||
3104 | 724 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
3105 | 725 | "ID_PART_ENTRY_SIZE": "2048", | ||
3106 | 726 | "ID_PART_ENTRY_TYPE": "21686148-6449-6e6f-744e-656564454649", | ||
3107 | 727 | "ID_PART_ENTRY_UUID": "8088175c-362a-4b46-9603-f3595065fa73", | ||
3108 | 728 | "ID_PART_TABLE_TYPE": "gpt", | ||
3109 | 729 | "ID_PART_TABLE_UUID": "8261cd75-2234-4dbd-920a-d21a7c083c94", | ||
3110 | 730 | "ID_PATH": "pci-0000:00:04.0-scsi-0:0:1:0", | ||
3111 | 731 | "ID_PATH_TAG": "pci-0000_00_04_0-scsi-0_0_1_0", | ||
3112 | 732 | "ID_REVISION": "2.5+", | ||
3113 | 733 | "ID_SCSI": "1", | ||
3114 | 734 | "ID_SCSI_INQUIRY": "1", | ||
3115 | 735 | "ID_SERIAL": "30000000000000064", | ||
3116 | 736 | "ID_SERIAL_SHORT": "0000000000000064", | ||
3117 | 737 | "ID_TYPE": "disk", | ||
3118 | 738 | "ID_VENDOR": "QEMU", | ||
3119 | 739 | "ID_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
3120 | 740 | "ID_WWN": "0x0000000000000064", | ||
3121 | 741 | "ID_WWN_WITH_EXTENSION": "0x0000000000000064", | ||
3122 | 742 | "MAJOR": "8", | ||
3123 | 743 | "MINOR": "17", | ||
3124 | 744 | "PARTN": "1", | ||
3125 | 745 | "SCSI_IDENT_LUN_NAA_LOCAL": "0000000000000064", | ||
3126 | 746 | "SCSI_IDENT_LUN_VENDOR": "serial-a", | ||
3127 | 747 | "SCSI_IDENT_SERIAL": "serial-a", | ||
3128 | 748 | "SCSI_MODEL": "QEMU_HARDDISK", | ||
3129 | 749 | "SCSI_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
3130 | 750 | "SCSI_REVISION": "2.5+", | ||
3131 | 751 | "SCSI_TPGS": "0", | ||
3132 | 752 | "SCSI_TYPE": "disk", | ||
3133 | 753 | "SCSI_VENDOR": "QEMU", | ||
3134 | 754 | "SCSI_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
3135 | 755 | "SUBSYSTEM": "block", | ||
3136 | 756 | "SYSTEMD_READY": "0", | ||
3137 | 757 | "TAGS": ":systemd:", | ||
3138 | 758 | "USEC_INITIALIZED": "1383416", | ||
3139 | 759 | "attrs": { | ||
3140 | 760 | "alignment_offset": "0", | ||
3141 | 761 | "dev": "8:17", | ||
3142 | 762 | "discard_alignment": "0", | ||
3143 | 763 | "inflight": " 0 0", | ||
3144 | 764 | "partition": "1", | ||
3145 | 765 | "ro": "0", | ||
3146 | 766 | "size": "1048576", | ||
3147 | 767 | "start": "2048", | ||
3148 | 768 | "stat": " 86 0 712 7 0 0 0 0 0 72 0 0 0 0 0", | ||
3149 | 769 | "subsystem": "block", | ||
3150 | 770 | "uevent": "MAJOR=8\nMINOR=17\nDEVNAME=sdb1\nDEVTYPE=partition\nPARTN=1" | ||
3151 | 771 | } | ||
3152 | 772 | }, | ||
3153 | 773 | "/dev/sdb2": { | ||
3154 | 774 | "DEVLINKS": "/dev/disk/by-id/wwn-0x0000000000000064-part2 /dev/disk/by-id/scsi-SQEMU_QEMU_HARDDISK_serial-a-part2 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_serial-a-part2 /dev/disk/by-partuuid/760493ac-7945-44c5-a6bd-58fcd6632ea7 /dev/disk/by-path/pci-0000:00:04.0-scsi-0:0:1:0-part2 /dev/disk/by-uuid/80ca57a0-60b7-4328-be41-afedf915effd /dev/disk/by-id/scsi-30000000000000064-part2", | ||
3155 | 775 | "DEVNAME": "/dev/sdb2", | ||
3156 | 776 | "DEVPATH": "/devices/pci0000:00/0000:00:04.0/virtio0/host2/target2:0:1/2:0:1:0/block/sdb/sdb2", | ||
3157 | 777 | "DEVTYPE": "partition", | ||
3158 | 778 | "DM_MULTIPATH_DEVICE_PATH": "1", | ||
3159 | 779 | "ID_BUS": "scsi", | ||
3160 | 780 | "ID_FS_TYPE": "ext4", | ||
3161 | 781 | "ID_FS_USAGE": "filesystem", | ||
3162 | 782 | "ID_FS_UUID": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
3163 | 783 | "ID_FS_UUID_ENC": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
3164 | 784 | "ID_FS_VERSION": "1.0", | ||
3165 | 785 | "ID_MODEL": "QEMU_HARDDISK", | ||
3166 | 786 | "ID_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
3167 | 787 | "ID_PART_ENTRY_DISK": "8:16", | ||
3168 | 788 | "ID_PART_ENTRY_NUMBER": "2", | ||
3169 | 789 | "ID_PART_ENTRY_OFFSET": "4096", | ||
3170 | 790 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
3171 | 791 | "ID_PART_ENTRY_SIZE": "20965376", | ||
3172 | 792 | "ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4", | ||
3173 | 793 | "ID_PART_ENTRY_UUID": "760493ac-7945-44c5-a6bd-58fcd6632ea7", | ||
3174 | 794 | "ID_PART_TABLE_TYPE": "gpt", | ||
3175 | 795 | "ID_PART_TABLE_UUID": "8261cd75-2234-4dbd-920a-d21a7c083c94", | ||
3176 | 796 | "ID_PATH": "pci-0000:00:04.0-scsi-0:0:1:0", | ||
3177 | 797 | "ID_PATH_TAG": "pci-0000_00_04_0-scsi-0_0_1_0", | ||
3178 | 798 | "ID_REVISION": "2.5+", | ||
3179 | 799 | "ID_SCSI": "1", | ||
3180 | 800 | "ID_SCSI_INQUIRY": "1", | ||
3181 | 801 | "ID_SERIAL": "30000000000000064", | ||
3182 | 802 | "ID_SERIAL_SHORT": "0000000000000064", | ||
3183 | 803 | "ID_TYPE": "disk", | ||
3184 | 804 | "ID_VENDOR": "QEMU", | ||
3185 | 805 | "ID_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
3186 | 806 | "ID_WWN": "0x0000000000000064", | ||
3187 | 807 | "ID_WWN_WITH_EXTENSION": "0x0000000000000064", | ||
3188 | 808 | "MAJOR": "8", | ||
3189 | 809 | "MINOR": "18", | ||
3190 | 810 | "PARTN": "2", | ||
3191 | 811 | "SCSI_IDENT_LUN_NAA_LOCAL": "0000000000000064", | ||
3192 | 812 | "SCSI_IDENT_LUN_VENDOR": "serial-a", | ||
3193 | 813 | "SCSI_IDENT_SERIAL": "serial-a", | ||
3194 | 814 | "SCSI_MODEL": "QEMU_HARDDISK", | ||
3195 | 815 | "SCSI_MODEL_ENC": "QEMU\\x20HARDDISK\\x20\\x20\\x20", | ||
3196 | 816 | "SCSI_REVISION": "2.5+", | ||
3197 | 817 | "SCSI_TPGS": "0", | ||
3198 | 818 | "SCSI_TYPE": "disk", | ||
3199 | 819 | "SCSI_VENDOR": "QEMU", | ||
3200 | 820 | "SCSI_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
3201 | 821 | "SUBSYSTEM": "block", | ||
3202 | 822 | "SYSTEMD_READY": "0", | ||
3203 | 823 | "TAGS": ":systemd:", | ||
3204 | 824 | "USEC_INITIALIZED": "1355435", | ||
3205 | 825 | "attrs": { | ||
3206 | 826 | "alignment_offset": "0", | ||
3207 | 827 | "dev": "8:18", | ||
3208 | 828 | "discard_alignment": "0", | ||
3209 | 829 | "inflight": " 0 0", | ||
3210 | 830 | "partition": "2", | ||
3211 | 831 | "ro": "0", | ||
3212 | 832 | "size": "10734272512", | ||
3213 | 833 | "start": "4096", | ||
3214 | 834 | "stat": " 129 0 8728 20 0 0 0 0 0 96 4 0 0 0 0", | ||
3215 | 835 | "subsystem": "block", | ||
3216 | 836 | "uevent": "MAJOR=8\nMINOR=18\nDEVNAME=sdb2\nDEVTYPE=partition\nPARTN=2" | ||
3217 | 837 | } | ||
3218 | 838 | }, | ||
3219 | 839 | "/dev/fd0": { | ||
3220 | 840 | "DEVNAME": "/dev/fd0", | ||
3221 | 841 | "DEVPATH": "/devices/platform/floppy.0/block/fd0", | ||
3222 | 842 | "DEVTYPE": "disk", | ||
3223 | 843 | "MAJOR": "2", | ||
3224 | 844 | "MINOR": "0", | ||
3225 | 845 | "SUBSYSTEM": "block", | ||
3226 | 846 | "TAGS": ":systemd:", | ||
3227 | 847 | "USEC_INITIALIZED": "1182861", | ||
3228 | 848 | "attrs": { | ||
3229 | 849 | "alignment_offset": "0", | ||
3230 | 850 | "bdi": null, | ||
3231 | 851 | "capability": "11", | ||
3232 | 852 | "dev": "2:0", | ||
3233 | 853 | "device": null, | ||
3234 | 854 | "discard_alignment": "0", | ||
3235 | 855 | "events": "", | ||
3236 | 856 | "events_async": "", | ||
3237 | 857 | "events_poll_msecs": "-1", | ||
3238 | 858 | "ext_range": "1", | ||
3239 | 859 | "hidden": "0", | ||
3240 | 860 | "inflight": " 0 0", | ||
3241 | 861 | "range": "1", | ||
3242 | 862 | "removable": "1", | ||
3243 | 863 | "ro": "0", | ||
3244 | 864 | "size": "4096", | ||
3245 | 865 | "stat": " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", | ||
3246 | 866 | "subsystem": "block", | ||
3247 | 867 | "uevent": "MAJOR=2\nMINOR=0\nDEVNAME=fd0\nDEVTYPE=disk" | ||
3248 | 868 | } | ||
3249 | 869 | }, | ||
3250 | 870 | "/dev/dm-0": { | ||
3251 | 871 | "DEVLINKS": "/dev/disk/by-id/wwn-0x0000000000000064 /dev/disk/by-id/dm-name-mpatha /dev/disk/by-id/dm-uuid-mpath-30000000000000064 /dev/mapper/mpatha", | ||
3252 | 872 | "DEVNAME": "/dev/dm-0", | ||
3253 | 873 | "DEVPATH": "/devices/virtual/block/dm-0", | ||
3254 | 874 | "DEVTYPE": "disk", | ||
3255 | 875 | "DM_NAME": "mpatha", | ||
3256 | 876 | "DM_STATE": "ACTIVE", | ||
3257 | 877 | "DM_SUSPENDED": "0", | ||
3258 | 878 | "DM_TABLE_STATE": "LIVE", | ||
3259 | 879 | "DM_TYPE": "scsi", | ||
3260 | 880 | "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", | ||
3261 | 881 | "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", | ||
3262 | 882 | "DM_UDEV_RULES": "1", | ||
3263 | 883 | "DM_UDEV_RULES_VSN": "2", | ||
3264 | 884 | "DM_UUID": "mpath-30000000000000064", | ||
3265 | 885 | "DM_WWN": "0x0000000000000064", | ||
3266 | 886 | "ID_PART_TABLE_TYPE": "gpt", | ||
3267 | 887 | "ID_PART_TABLE_UUID": "8261cd75-2234-4dbd-920a-d21a7c083c94", | ||
3268 | 888 | "MAJOR": "253", | ||
3269 | 889 | "MINOR": "0", | ||
3270 | 890 | "MPATH_DEVICE_READY": "1", | ||
3271 | 891 | "MPATH_SBIN_PATH": "/sbin", | ||
3272 | 892 | "SUBSYSTEM": "block", | ||
3273 | 893 | "TAGS": ":systemd:", | ||
3274 | 894 | "USEC_INITIALIZED": "9639027", | ||
3275 | 895 | "attrs": { | ||
3276 | 896 | "alignment_offset": "0", | ||
3277 | 897 | "bdi": null, | ||
3278 | 898 | "capability": "10", | ||
3279 | 899 | "dev": "253:0", | ||
3280 | 900 | "discard_alignment": "0", | ||
3281 | 901 | "events": "", | ||
3282 | 902 | "events_async": "", | ||
3283 | 903 | "events_poll_msecs": "-1", | ||
3284 | 904 | "ext_range": "1", | ||
3285 | 905 | "hidden": "0", | ||
3286 | 906 | "inflight": " 0 0", | ||
3287 | 907 | "range": "1", | ||
3288 | 908 | "removable": "0", | ||
3289 | 909 | "ro": "0", | ||
3290 | 910 | "size": "10737418240", | ||
3291 | 911 | "stat": " 321 0 16720 46 0 0 0 0 0 172 0 0 0 0 0", | ||
3292 | 912 | "subsystem": "block", | ||
3293 | 913 | "uevent": "MAJOR=253\nMINOR=0\nDEVNAME=dm-0\nDEVTYPE=disk" | ||
3294 | 914 | }, | ||
3295 | 915 | "partitiontable": { | ||
3296 | 916 | "label": "gpt", | ||
3297 | 917 | "id": "8261CD75-2234-4DBD-920A-D21A7C083C94", | ||
3298 | 918 | "device": "/dev/dm-0", | ||
3299 | 919 | "unit": "sectors", | ||
3300 | 920 | "firstlba": 34, | ||
3301 | 921 | "lastlba": 20971486, | ||
3302 | 922 | "partitions": [ | ||
3303 | 923 | { | ||
3304 | 924 | "node": "/dev/mapper/mpatha-part1", | ||
3305 | 925 | "start": 2048, | ||
3306 | 926 | "size": 2048, | ||
3307 | 927 | "type": "21686148-6449-6E6F-744E-656564454649", | ||
3308 | 928 | "uuid": "8088175C-362A-4B46-9603-F3595065FA73" | ||
3309 | 929 | }, | ||
3310 | 930 | { | ||
3311 | 931 | "node": "/dev/mapper/mpatha-part2", | ||
3312 | 932 | "start": 4096, | ||
3313 | 933 | "size": 20965376, | ||
3314 | 934 | "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4", | ||
3315 | 935 | "uuid": "760493AC-7945-44C5-A6BD-58FCD6632EA7" | ||
3316 | 936 | } | ||
3317 | 937 | ] | ||
3318 | 938 | } | ||
3319 | 939 | }, | ||
3320 | 940 | "/dev/dm-1": { | ||
3321 | 941 | "DEVLINKS": "/dev/disk/by-id/dm-name-mpatha-part1 /dev/mapper/mpatha-part1 /dev/disk/by-id/wwn-0x0000000000000064-part1 /dev/disk/by-partuuid/8088175c-362a-4b46-9603-f3595065fa73 /dev/disk/by-id/dm-uuid-part1-mpath-30000000000000064", | ||
3322 | 942 | "DEVNAME": "/dev/dm-1", | ||
3323 | 943 | "DEVPATH": "/devices/virtual/block/dm-1", | ||
3324 | 944 | "DEVTYPE": "disk", | ||
3325 | 945 | "DM_ACTIVATION": "1", | ||
3326 | 946 | "DM_MPATH": "mpatha", | ||
3327 | 947 | "DM_NAME": "mpatha-part1", | ||
3328 | 948 | "DM_PART": "1", | ||
3329 | 949 | "DM_STATE": "ACTIVE", | ||
3330 | 950 | "DM_SUBSYSTEM_UDEV_FLAG0": "1", | ||
3331 | 951 | "DM_SUSPENDED": "0", | ||
3332 | 952 | "DM_TABLE_STATE": "LIVE", | ||
3333 | 953 | "DM_TYPE": "scsi", | ||
3334 | 954 | "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", | ||
3335 | 955 | "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", | ||
3336 | 956 | "DM_UDEV_RULES": "1", | ||
3337 | 957 | "DM_UDEV_RULES_VSN": "2", | ||
3338 | 958 | "DM_UUID": "part1-mpath-30000000000000064", | ||
3339 | 959 | "DM_WWN": "0x0000000000000064", | ||
3340 | 960 | "ID_PART_ENTRY_DISK": "253:0", | ||
3341 | 961 | "ID_PART_ENTRY_NUMBER": "1", | ||
3342 | 962 | "ID_PART_ENTRY_OFFSET": "2048", | ||
3343 | 963 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
3344 | 964 | "ID_PART_ENTRY_SIZE": "2048", | ||
3345 | 965 | "ID_PART_ENTRY_TYPE": "21686148-6449-6e6f-744e-656564454649", | ||
3346 | 966 | "ID_PART_ENTRY_UUID": "8088175c-362a-4b46-9603-f3595065fa73", | ||
3347 | 967 | "MAJOR": "253", | ||
3348 | 968 | "MINOR": "1", | ||
3349 | 969 | "SUBSYSTEM": "block", | ||
3350 | 970 | "TAGS": ":systemd:", | ||
3351 | 971 | "USEC_INITIALIZED": "10556653", | ||
3352 | 972 | "attrs": { | ||
3353 | 973 | "alignment_offset": "0", | ||
3354 | 974 | "bdi": null, | ||
3355 | 975 | "capability": "10", | ||
3356 | 976 | "dev": "253:1", | ||
3357 | 977 | "discard_alignment": "0", | ||
3358 | 978 | "events": "", | ||
3359 | 979 | "events_async": "", | ||
3360 | 980 | "events_poll_msecs": "-1", | ||
3361 | 981 | "ext_range": "1", | ||
3362 | 982 | "hidden": "0", | ||
3363 | 983 | "inflight": " 0 0", | ||
3364 | 984 | "range": "1", | ||
3365 | 985 | "removable": "0", | ||
3366 | 986 | "ro": "0", | ||
3367 | 987 | "size": "1048576", | ||
3368 | 988 | "stat": " 78 0 624 8 0 0 0 0 0 56 8 0 0 0 0", | ||
3369 | 989 | "subsystem": "block", | ||
3370 | 990 | "uevent": "MAJOR=253\nMINOR=1\nDEVNAME=dm-1\nDEVTYPE=disk" | ||
3371 | 991 | } | ||
3372 | 992 | }, | ||
3373 | 993 | "/dev/dm-2": { | ||
3374 | 994 | "DEVLINKS": "/dev/mapper/mpatha-part2 /dev/disk/by-id/dm-uuid-part2-mpath-30000000000000064 /dev/disk/by-id/dm-name-mpatha-part2 /dev/disk/by-partuuid/760493ac-7945-44c5-a6bd-58fcd6632ea7 /dev/disk/by-uuid/80ca57a0-60b7-4328-be41-afedf915effd /dev/disk/by-id/wwn-0x0000000000000064-part2", | ||
3375 | 995 | "DEVNAME": "/dev/dm-2", | ||
3376 | 996 | "DEVPATH": "/devices/virtual/block/dm-2", | ||
3377 | 997 | "DEVTYPE": "disk", | ||
3378 | 998 | "DM_ACTIVATION": "1", | ||
3379 | 999 | "DM_MPATH": "mpatha", | ||
3380 | 1000 | "DM_NAME": "mpatha-part2", | ||
3381 | 1001 | "DM_PART": "2", | ||
3382 | 1002 | "DM_STATE": "ACTIVE", | ||
3383 | 1003 | "DM_SUBSYSTEM_UDEV_FLAG0": "1", | ||
3384 | 1004 | "DM_SUSPENDED": "0", | ||
3385 | 1005 | "DM_TABLE_STATE": "LIVE", | ||
3386 | 1006 | "DM_TYPE": "scsi", | ||
3387 | 1007 | "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", | ||
3388 | 1008 | "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", | ||
3389 | 1009 | "DM_UDEV_RULES": "1", | ||
3390 | 1010 | "DM_UDEV_RULES_VSN": "2", | ||
3391 | 1011 | "DM_UUID": "part2-mpath-30000000000000064", | ||
3392 | 1012 | "DM_WWN": "0x0000000000000064", | ||
3393 | 1013 | "ID_FS_TYPE": "ext4", | ||
3394 | 1014 | "ID_FS_USAGE": "filesystem", | ||
3395 | 1015 | "ID_FS_UUID": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
3396 | 1016 | "ID_FS_UUID_ENC": "80ca57a0-60b7-4328-be41-afedf915effd", | ||
3397 | 1017 | "ID_FS_VERSION": "1.0", | ||
3398 | 1018 | "ID_PART_ENTRY_DISK": "253:0", | ||
3399 | 1019 | "ID_PART_ENTRY_NUMBER": "2", | ||
3400 | 1020 | "ID_PART_ENTRY_OFFSET": "4096", | ||
3401 | 1021 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
3402 | 1022 | "ID_PART_ENTRY_SIZE": "20965376", | ||
3403 | 1023 | "ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4", | ||
3404 | 1024 | "ID_PART_ENTRY_UUID": "760493ac-7945-44c5-a6bd-58fcd6632ea7", | ||
3405 | 1025 | "MAJOR": "253", | ||
3406 | 1026 | "MINOR": "2", | ||
3407 | 1027 | "SUBSYSTEM": "block", | ||
3408 | 1028 | "TAGS": ":systemd:", | ||
3409 | 1029 | "USEC_INITIALIZED": "10583306", | ||
3410 | 1030 | "attrs": { | ||
3411 | 1031 | "alignment_offset": "0", | ||
3412 | 1032 | "bdi": null, | ||
3413 | 1033 | "capability": "10", | ||
3414 | 1034 | "dev": "253:2", | ||
3415 | 1035 | "discard_alignment": "0", | ||
3416 | 1036 | "events": "", | ||
3417 | 1037 | "events_async": "", | ||
3418 | 1038 | "events_poll_msecs": "-1", | ||
3419 | 1039 | "ext_range": "1", | ||
3420 | 1040 | "hidden": "0", | ||
3421 | 1041 | "inflight": " 0 0", | ||
3422 | 1042 | "range": "1", | ||
3423 | 1043 | "removable": "0", | ||
3424 | 1044 | "ro": "0", | ||
3425 | 1045 | "size": "10734272512", | ||
3426 | 1046 | "stat": " 91 0 8032 4 0 0 0 0 0 52 4 0 0 0 0", | ||
3427 | 1047 | "subsystem": "block", | ||
3428 | 1048 | "uevent": "MAJOR=253\nMINOR=2\nDEVNAME=dm-2\nDEVTYPE=disk" | ||
3429 | 1049 | } | ||
3430 | 1050 | } | ||
3431 | 1051 | }, | ||
3432 | 1052 | "bcache": { | ||
3433 | 1053 | "backing": {}, | ||
3434 | 1054 | "caching": {} | ||
3435 | 1055 | }, | ||
3436 | 1056 | "zfs": { | ||
3437 | 1057 | "zpools": {} | ||
3438 | 1058 | } | ||
3439 | 1059 | } | ||
3440 | diff --git a/tests/data/probert_storage_raid1_partitions.json b/tests/data/probert_storage_raid1_partitions.json | |||
3441 | 0 | new file mode 100644 | 1060 | new file mode 100644 |
3442 | index 0000000..709da5a | |||
3443 | --- /dev/null | |||
3444 | +++ b/tests/data/probert_storage_raid1_partitions.json | |||
3445 | @@ -0,0 +1,951 @@ | |||
3446 | 1 | { | ||
3447 | 2 | "zfs": { | ||
3448 | 3 | "zpools": {} | ||
3449 | 4 | }, | ||
3450 | 5 | "dmcrypt": {}, | ||
3451 | 6 | "blockdev": { | ||
3452 | 7 | "/dev/sr0": { | ||
3453 | 8 | "DEVLINKS": "/dev/disk/by-label/Ubuntu-Server\\x2020.04\\x20LTS\\x20ppc64 /dev/disk/by-id/scsi-0QEMU_QEMU_CD-ROM_drive-scsi0-0-0-0 /dev/dvd /dev/cdrom /dev/disk/by-path/pci-0000:00:02.0-scsi-0:0:0:0 /dev/disk/by-uuid/2019-11-16-08-09-20-00", | ||
3454 | 9 | "DEVNAME": "/dev/sr0", | ||
3455 | 10 | "DEVPATH": "/devices/pci0000:00/0000:00:02.0/virtio1/host0/target0:0:0/0:0:0:0/block/sr0", | ||
3456 | 11 | "DEVTYPE": "disk", | ||
3457 | 12 | "ID_BUS": "scsi", | ||
3458 | 13 | "ID_CDROM": "1", | ||
3459 | 14 | "ID_CDROM_CD": "1", | ||
3460 | 15 | "ID_CDROM_DVD": "1", | ||
3461 | 16 | "ID_CDROM_MEDIA": "1", | ||
3462 | 17 | "ID_CDROM_MEDIA_DVD": "1", | ||
3463 | 18 | "ID_CDROM_MEDIA_SESSION_COUNT": "1", | ||
3464 | 19 | "ID_CDROM_MEDIA_STATE": "complete", | ||
3465 | 20 | "ID_CDROM_MEDIA_TRACK_COUNT": "1", | ||
3466 | 21 | "ID_CDROM_MEDIA_TRACK_COUNT_DATA": "1", | ||
3467 | 22 | "ID_CDROM_MRW": "1", | ||
3468 | 23 | "ID_CDROM_MRW_W": "1", | ||
3469 | 24 | "ID_FOR_SEAT": "block-pci-0000_00_02_0-scsi-0_0_0_0", | ||
3470 | 25 | "ID_FS_APPLICATION_ID": "GENISOIMAGE\\x20ISO\\x209660\\x2fHFS\\x20FILESYSTEM\\x20CREATOR\\x20\\x28C\\x29\\x201993\\x20E.YOUNGDALE\\x20\\x28C\\x29\\x201997-2006\\x20J.PEARSON\\x2fJ.SCHILLING\\x20\\x28C\\x29\\x202006-2007\\x20CDRKIT\\x20TEAM", | ||
3471 | 26 | "ID_FS_LABEL": "Ubuntu-Server_20.04_LTS_ppc64", | ||
3472 | 27 | "ID_FS_LABEL_ENC": "Ubuntu-Server\\x2020.04\\x20LTS\\x20ppc64", | ||
3473 | 28 | "ID_FS_SYSTEM_ID": "LINUX", | ||
3474 | 29 | "ID_FS_TYPE": "iso9660", | ||
3475 | 30 | "ID_FS_USAGE": "filesystem", | ||
3476 | 31 | "ID_FS_UUID": "2019-11-16-08-09-20-00", | ||
3477 | 32 | "ID_FS_UUID_ENC": "2019-11-16-08-09-20-00", | ||
3478 | 33 | "ID_MODEL": "QEMU_CD-ROM", | ||
3479 | 34 | "ID_MODEL_ENC": "QEMU\\x20CD-ROM\\x20\\x20\\x20\\x20\\x20", | ||
3480 | 35 | "ID_PART_TABLE_TYPE": "mac", | ||
3481 | 36 | "ID_PATH": "pci-0000:00:02.0-scsi-0:0:0:0", | ||
3482 | 37 | "ID_PATH_TAG": "pci-0000_00_02_0-scsi-0_0_0_0", | ||
3483 | 38 | "ID_REVISION": "2.5+", | ||
3484 | 39 | "ID_SCSI": "1", | ||
3485 | 40 | "ID_SCSI_INQUIRY": "1", | ||
3486 | 41 | "ID_SERIAL": "0QEMU_QEMU_CD-ROM_drive-scsi0-0-0-0", | ||
3487 | 42 | "ID_SERIAL_SHORT": "drive-scsi0-0-0-0", | ||
3488 | 43 | "ID_TYPE": "cd", | ||
3489 | 44 | "ID_VENDOR": "QEMU", | ||
3490 | 45 | "ID_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
3491 | 46 | "MAJOR": "11", | ||
3492 | 47 | "MINOR": "0", | ||
3493 | 48 | "SCSI_MODEL": "QEMU_CD-ROM", | ||
3494 | 49 | "SCSI_MODEL_ENC": "QEMU\\x20CD-ROM\\x20\\x20\\x20\\x20\\x20", | ||
3495 | 50 | "SCSI_REVISION": "2.5+", | ||
3496 | 51 | "SCSI_TPGS": "0", | ||
3497 | 52 | "SCSI_TYPE": "cd/dvd", | ||
3498 | 53 | "SCSI_VENDOR": "QEMU", | ||
3499 | 54 | "SCSI_VENDOR_ENC": "QEMU\\x20\\x20\\x20\\x20", | ||
3500 | 55 | "SUBSYSTEM": "block", | ||
3501 | 56 | "SYSTEMD_MOUNT_DEVICE_BOUND": "1", | ||
3502 | 57 | "TAGS": ":uaccess:seat:systemd:", | ||
3503 | 58 | "USEC_INITIALIZED": "626053", | ||
3504 | 59 | "attrs": { | ||
3505 | 60 | "alignment_offset": "0", | ||
3506 | 61 | "bdi": null, | ||
3507 | 62 | "capability": "119", | ||
3508 | 63 | "dev": "11:0", | ||
3509 | 64 | "device": null, | ||
3510 | 65 | "discard_alignment": "0", | ||
3511 | 66 | "events": "media_change eject_request", | ||
3512 | 67 | "events_async": "", | ||
3513 | 68 | "events_poll_msecs": "-1", | ||
3514 | 69 | "ext_range": "1", | ||
3515 | 70 | "hidden": "0", | ||
3516 | 71 | "inflight": " 0 0", | ||
3517 | 72 | "range": "1", | ||
3518 | 73 | "removable": "1", | ||
3519 | 74 | "ro": "0", | ||
3520 | 75 | "size": "911030272", | ||
3521 | 76 | "stat": " 6887 0 1582024 636 0 0 0 0 0 17552 64 0 0 0 0", | ||
3522 | 77 | "subsystem": "block", | ||
3523 | 78 | "uevent": "MAJOR=11\nMINOR=0\nDEVNAME=sr0\nDEVTYPE=disk" | ||
3524 | 79 | }, | ||
3525 | 80 | "partitiontable": { | ||
3526 | 81 | "label": "dos", | ||
3527 | 82 | "id": "0x64040020", | ||
3528 | 83 | "device": "/dev/sr0", | ||
3529 | 84 | "unit": "sectors", | ||
3530 | 85 | "partitions": [ | ||
3531 | 86 | { | ||
3532 | 87 | "node": "/dev/sr0p1", | ||
3533 | 88 | "start": 0, | ||
3534 | 89 | "size": 1778756, | ||
3535 | 90 | "type": "96", | ||
3536 | 91 | "bootable": true | ||
3537 | 92 | }, | ||
3538 | 93 | { | ||
3539 | 94 | "node": "/dev/sr0p2", | ||
3540 | 95 | "start": 2129919, | ||
3541 | 96 | "size": 1936615684, | ||
3542 | 97 | "type": "ff" | ||
3543 | 98 | }, | ||
3544 | 99 | { | ||
3545 | 100 | "node": "/dev/sr0p3", | ||
3546 | 101 | "start": 1024, | ||
3547 | 102 | "size": 0, | ||
3548 | 103 | "type": "0" | ||
3549 | 104 | }, | ||
3550 | 105 | { | ||
3551 | 106 | "node": "/dev/sr0p4", | ||
3552 | 107 | "start": 0, | ||
3553 | 108 | "size": 0, | ||
3554 | 109 | "type": "0" | ||
3555 | 110 | } | ||
3556 | 111 | ] | ||
3557 | 112 | } | ||
3558 | 113 | }, | ||
3559 | 114 | "/dev/vda": { | ||
3560 | 115 | "DEVLINKS": "/dev/disk/by-path/pci-0000:00:04.0 /dev/disk/by-path/virtio-pci-0000:00:04.0", | ||
3561 | 116 | "DEVNAME": "/dev/vda", | ||
3562 | 117 | "DEVPATH": "/devices/pci0000:00/0000:00:04.0/virtio2/block/vda", | ||
3563 | 118 | "DEVTYPE": "disk", | ||
3564 | 119 | "ID_PART_TABLE_TYPE": "gpt", | ||
3565 | 120 | "ID_PART_TABLE_UUID": "c43bafba-6f3f-4ac7-8c3a-3808451ad55e", | ||
3566 | 121 | "ID_PATH": "pci-0000:00:04.0", | ||
3567 | 122 | "ID_PATH_TAG": "pci-0000_00_04_0", | ||
3568 | 123 | "MAJOR": "252", | ||
3569 | 124 | "MINOR": "0", | ||
3570 | 125 | "SUBSYSTEM": "block", | ||
3571 | 126 | "TAGS": ":systemd:", | ||
3572 | 127 | "USEC_INITIALIZED": "592200", | ||
3573 | 128 | "attrs": { | ||
3574 | 129 | "alignment_offset": "0", | ||
3575 | 130 | "bdi": null, | ||
3576 | 131 | "cache_type": "write back", | ||
3577 | 132 | "capability": "50", | ||
3578 | 133 | "dev": "252:0", | ||
3579 | 134 | "device": null, | ||
3580 | 135 | "discard_alignment": "0", | ||
3581 | 136 | "events": "", | ||
3582 | 137 | "events_async": "", | ||
3583 | 138 | "events_poll_msecs": "-1", | ||
3584 | 139 | "ext_range": "256", | ||
3585 | 140 | "hidden": "0", | ||
3586 | 141 | "inflight": " 0 0", | ||
3587 | 142 | "range": "16", | ||
3588 | 143 | "removable": "0", | ||
3589 | 144 | "ro": "0", | ||
3590 | 145 | "serial": "", | ||
3591 | 146 | "size": "6442450944", | ||
3592 | 147 | "stat": " 2923 0 473854 187 1654 3072 402696 427 0 3300 12 0 0 0 0", | ||
3593 | 148 | "subsystem": "block", | ||
3594 | 149 | "uevent": "MAJOR=252\nMINOR=0\nDEVNAME=vda\nDEVTYPE=disk" | ||
3595 | 150 | }, | ||
3596 | 151 | "partitiontable": { | ||
3597 | 152 | "label": "gpt", | ||
3598 | 153 | "id": "C43BAFBA-6F3F-4AC7-8C3A-3808451AD55E", | ||
3599 | 154 | "device": "/dev/vda", | ||
3600 | 155 | "unit": "sectors", | ||
3601 | 156 | "firstlba": 34, | ||
3602 | 157 | "lastlba": 12582878, | ||
3603 | 158 | "partitions": [ | ||
3604 | 159 | { | ||
3605 | 160 | "node": "/dev/vda1", | ||
3606 | 161 | "start": 2048, | ||
3607 | 162 | "size": 16384, | ||
3608 | 163 | "type": "9E1A2D38-C612-4316-AA26-8B49521E5A8B", | ||
3609 | 164 | "uuid": "CFECC68C-325E-4066-8F6F-0FE4F57D1AF5" | ||
3610 | 165 | }, | ||
3611 | 166 | { | ||
3612 | 167 | "node": "/dev/vda2", | ||
3613 | 168 | "start": 18432, | ||
3614 | 169 | "size": 2097152, | ||
3615 | 170 | "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4", | ||
3616 | 171 | "uuid": "D29ADB04-DF89-4D54-9B50-8DB8EEDAB339" | ||
3617 | 172 | } | ||
3618 | 173 | ] | ||
3619 | 174 | } | ||
3620 | 175 | }, | ||
3621 | 176 | "/dev/vda1": { | ||
3622 | 177 | "DEVLINKS": "/dev/disk/by-path/pci-0000:00:04.0-part1 /dev/disk/by-partuuid/cfecc68c-325e-4066-8f6f-0fe4f57d1af5 /dev/disk/by-path/virtio-pci-0000:00:04.0-part1", | ||
3623 | 178 | "DEVNAME": "/dev/vda1", | ||
3624 | 179 | "DEVPATH": "/devices/pci0000:00/0000:00:04.0/virtio2/block/vda/vda1", | ||
3625 | 180 | "DEVTYPE": "partition", | ||
3626 | 181 | "ID_PART_ENTRY_DISK": "252:0", | ||
3627 | 182 | "ID_PART_ENTRY_NUMBER": "1", | ||
3628 | 183 | "ID_PART_ENTRY_OFFSET": "2048", | ||
3629 | 184 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
3630 | 185 | "ID_PART_ENTRY_SIZE": "16384", | ||
3631 | 186 | "ID_PART_ENTRY_TYPE": "9e1a2d38-c612-4316-aa26-8b49521e5a8b", | ||
3632 | 187 | "ID_PART_ENTRY_UUID": "cfecc68c-325e-4066-8f6f-0fe4f57d1af5", | ||
3633 | 188 | "ID_PART_TABLE_TYPE": "gpt", | ||
3634 | 189 | "ID_PART_TABLE_UUID": "c43bafba-6f3f-4ac7-8c3a-3808451ad55e", | ||
3635 | 190 | "ID_PATH": "pci-0000:00:04.0", | ||
3636 | 191 | "ID_PATH_TAG": "pci-0000_00_04_0", | ||
3637 | 192 | "ID_SCSI": "1", | ||
3638 | 193 | "MAJOR": "252", | ||
3639 | 194 | "MINOR": "1", | ||
3640 | 195 | "PARTN": "1", | ||
3641 | 196 | "SUBSYSTEM": "block", | ||
3642 | 197 | "TAGS": ":systemd:", | ||
3643 | 198 | "USEC_INITIALIZED": "62680508", | ||
3644 | 199 | "attrs": { | ||
3645 | 200 | "alignment_offset": "0", | ||
3646 | 201 | "dev": "252:1", | ||
3647 | 202 | "discard_alignment": "0", | ||
3648 | 203 | "inflight": " 0 0", | ||
3649 | 204 | "partition": "1", | ||
3650 | 205 | "ro": "0", | ||
3651 | 206 | "size": "8388608", | ||
3652 | 207 | "start": "2048", | ||
3653 | 208 | "stat": " 449 0 74496 31 6 3 1152 0 0 620 0 0 0 0 0", | ||
3654 | 209 | "subsystem": "block", | ||
3655 | 210 | "uevent": "MAJOR=252\nMINOR=1\nDEVNAME=vda1\nDEVTYPE=partition\nPARTN=1" | ||
3656 | 211 | } | ||
3657 | 212 | }, | ||
3658 | 213 | "/dev/vda2": { | ||
3659 | 214 | "DEVLINKS": "/dev/disk/by-partuuid/d29adb04-df89-4d54-9b50-8db8eedab339 /dev/disk/by-uuid/0a3b5403-d358-4f30-9094-e5a19d60b222 /dev/disk/by-path/pci-0000:00:04.0-part2 /dev/disk/by-path/virtio-pci-0000:00:04.0-part2", | ||
3660 | 215 | "DEVNAME": "/dev/vda2", | ||
3661 | 216 | "DEVPATH": "/devices/pci0000:00/0000:00:04.0/virtio2/block/vda/vda2", | ||
3662 | 217 | "DEVTYPE": "partition", | ||
3663 | 218 | "ID_FS_TYPE": "ext4", | ||
3664 | 219 | "ID_FS_USAGE": "filesystem", | ||
3665 | 220 | "ID_FS_UUID": "0a3b5403-d358-4f30-9094-e5a19d60b222", | ||
3666 | 221 | "ID_FS_UUID_ENC": "0a3b5403-d358-4f30-9094-e5a19d60b222", | ||
3667 | 222 | "ID_FS_VERSION": "1.0", | ||
3668 | 223 | "ID_PART_ENTRY_DISK": "252:0", | ||
3669 | 224 | "ID_PART_ENTRY_NUMBER": "2", | ||
3670 | 225 | "ID_PART_ENTRY_OFFSET": "18432", | ||
3671 | 226 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
3672 | 227 | "ID_PART_ENTRY_SIZE": "2097152", | ||
3673 | 228 | "ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4", | ||
3674 | 229 | "ID_PART_ENTRY_UUID": "d29adb04-df89-4d54-9b50-8db8eedab339", | ||
3675 | 230 | "ID_PART_TABLE_TYPE": "gpt", | ||
3676 | 231 | "ID_PART_TABLE_UUID": "c43bafba-6f3f-4ac7-8c3a-3808451ad55e", | ||
3677 | 232 | "ID_PATH": "pci-0000:00:04.0", | ||
3678 | 233 | "ID_PATH_TAG": "pci-0000_00_04_0", | ||
3679 | 234 | "ID_SCSI": "1", | ||
3680 | 235 | "MAJOR": "252", | ||
3681 | 236 | "MINOR": "2", | ||
3682 | 237 | "PARTN": "2", | ||
3683 | 238 | "SUBSYSTEM": "block", | ||
3684 | 239 | "TAGS": ":systemd:", | ||
3685 | 240 | "USEC_INITIALIZED": "62650105", | ||
3686 | 241 | "attrs": { | ||
3687 | 242 | "alignment_offset": "0", | ||
3688 | 243 | "dev": "252:2", | ||
3689 | 244 | "discard_alignment": "0", | ||
3690 | 245 | "inflight": " 0 0", | ||
3691 | 246 | "partition": "2", | ||
3692 | 247 | "ro": "0", | ||
3693 | 248 | "size": "1073741824", | ||
3694 | 249 | "start": "18432", | ||
3695 | 250 | "stat": " 322 0 50394 22 1522 2894 310648 343 0 756 12 0 0 0 0", | ||
3696 | 251 | "subsystem": "block", | ||
3697 | 252 | "uevent": "MAJOR=252\nMINOR=2\nDEVNAME=vda2\nDEVTYPE=partition\nPARTN=2" | ||
3698 | 253 | } | ||
3699 | 254 | }, | ||
3700 | 255 | "/dev/vdb": { | ||
3701 | 256 | "DEVLINKS": "/dev/disk/by-path/virtio-pci-0000:00:05.0 /dev/disk/by-path/pci-0000:00:05.0", | ||
3702 | 257 | "DEVNAME": "/dev/vdb", | ||
3703 | 258 | "DEVPATH": "/devices/pci0000:00/0000:00:05.0/virtio3/block/vdb", | ||
3704 | 259 | "DEVTYPE": "disk", | ||
3705 | 260 | "ID_PART_TABLE_TYPE": "gpt", | ||
3706 | 261 | "ID_PART_TABLE_UUID": "0c49cc0b-d527-4a88-a61a-4684bcdf8a5e", | ||
3707 | 262 | "ID_PATH": "pci-0000:00:05.0", | ||
3708 | 263 | "ID_PATH_TAG": "pci-0000_00_05_0", | ||
3709 | 264 | "MAJOR": "252", | ||
3710 | 265 | "MINOR": "16", | ||
3711 | 266 | "SUBSYSTEM": "block", | ||
3712 | 267 | "TAGS": ":systemd:", | ||
3713 | 268 | "USEC_INITIALIZED": "600195", | ||
3714 | 269 | "attrs": { | ||
3715 | 270 | "alignment_offset": "0", | ||
3716 | 271 | "bdi": null, | ||
3717 | 272 | "cache_type": "write back", | ||
3718 | 273 | "capability": "50", | ||
3719 | 274 | "dev": "252:16", | ||
3720 | 275 | "device": null, | ||
3721 | 276 | "discard_alignment": "0", | ||
3722 | 277 | "events": "", | ||
3723 | 278 | "events_async": "", | ||
3724 | 279 | "events_poll_msecs": "-1", | ||
3725 | 280 | "ext_range": "256", | ||
3726 | 281 | "hidden": "0", | ||
3727 | 282 | "inflight": " 0 0", | ||
3728 | 283 | "range": "16", | ||
3729 | 284 | "removable": "0", | ||
3730 | 285 | "ro": "0", | ||
3731 | 286 | "serial": "", | ||
3732 | 287 | "size": "6442450944", | ||
3733 | 288 | "stat": " 20457 64216 10072248 3184 39416 65487 5219881 24281 0 27324 8488 0 0 0 0", | ||
3734 | 289 | "subsystem": "block", | ||
3735 | 290 | "uevent": "MAJOR=252\nMINOR=16\nDEVNAME=vdb\nDEVTYPE=disk" | ||
3736 | 291 | }, | ||
3737 | 292 | "partitiontable": { | ||
3738 | 293 | "label": "gpt", | ||
3739 | 294 | "id": "0C49CC0B-D527-4A88-A61A-4684BCDF8A5E", | ||
3740 | 295 | "device": "/dev/vdb", | ||
3741 | 296 | "unit": "sectors", | ||
3742 | 297 | "firstlba": 34, | ||
3743 | 298 | "lastlba": 12582878, | ||
3744 | 299 | "partitions": [ | ||
3745 | 300 | { | ||
3746 | 301 | "node": "/dev/vdb1", | ||
3747 | 302 | "start": 2048, | ||
3748 | 303 | "size": 8388608, | ||
3749 | 304 | "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4", | ||
3750 | 305 | "uuid": "408078B3-15C1-4315-A376-C2F1E3F13A63" | ||
3751 | 306 | } | ||
3752 | 307 | ] | ||
3753 | 308 | } | ||
3754 | 309 | }, | ||
3755 | 310 | "/dev/vdb1": { | ||
3756 | 311 | "DEVLINKS": "/dev/disk/by-partuuid/408078b3-15c1-4315-a376-c2f1e3f13a63 /dev/disk/by-path/virtio-pci-0000:00:05.0-part1 /dev/disk/by-path/pci-0000:00:05.0-part1", | ||
3757 | 312 | "DEVNAME": "/dev/vdb1", | ||
3758 | 313 | "DEVPATH": "/devices/pci0000:00/0000:00:05.0/virtio3/block/vdb/vdb1", | ||
3759 | 314 | "DEVTYPE": "partition", | ||
3760 | 315 | "ID_FS_LABEL": "ubuntu-server:1", | ||
3761 | 316 | "ID_FS_LABEL_ENC": "ubuntu-server:1", | ||
3762 | 317 | "ID_FS_TYPE": "linux_raid_member", | ||
3763 | 318 | "ID_FS_USAGE": "raid", | ||
3764 | 319 | "ID_FS_UUID": "1e4e3ac4-abd1-ee76-6fdb-871a4d6677af", | ||
3765 | 320 | "ID_FS_UUID_ENC": "1e4e3ac4-abd1-ee76-6fdb-871a4d6677af", | ||
3766 | 321 | "ID_FS_UUID_SUB": "f1366f7f-319f-81e6-7550-edb94d240727", | ||
3767 | 322 | "ID_FS_UUID_SUB_ENC": "f1366f7f-319f-81e6-7550-edb94d240727", | ||
3768 | 323 | "ID_FS_VERSION": "1.2", | ||
3769 | 324 | "ID_PART_ENTRY_DISK": "252:16", | ||
3770 | 325 | "ID_PART_ENTRY_NUMBER": "1", | ||
3771 | 326 | "ID_PART_ENTRY_OFFSET": "2048", | ||
3772 | 327 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
3773 | 328 | "ID_PART_ENTRY_SIZE": "8388608", | ||
3774 | 329 | "ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4", | ||
3775 | 330 | "ID_PART_ENTRY_UUID": "408078b3-15c1-4315-a376-c2f1e3f13a63", | ||
3776 | 331 | "ID_PART_TABLE_TYPE": "gpt", | ||
3777 | 332 | "ID_PART_TABLE_UUID": "0c49cc0b-d527-4a88-a61a-4684bcdf8a5e", | ||
3778 | 333 | "ID_PATH": "pci-0000:00:05.0", | ||
3779 | 334 | "ID_PATH_TAG": "pci-0000_00_05_0", | ||
3780 | 335 | "ID_SCSI": "1", | ||
3781 | 336 | "MAJOR": "252", | ||
3782 | 337 | "MINOR": "17", | ||
3783 | 338 | "PARTN": "1", | ||
3784 | 339 | "SUBSYSTEM": "block", | ||
3785 | 340 | "TAGS": ":systemd:", | ||
3786 | 341 | "USEC_INITIALIZED": "52064605", | ||
3787 | 342 | "attrs": { | ||
3788 | 343 | "alignment_offset": "0", | ||
3789 | 344 | "dev": "252:17", | ||
3790 | 345 | "discard_alignment": "0", | ||
3791 | 346 | "inflight": " 0 0", | ||
3792 | 347 | "partition": "1", | ||
3793 | 348 | "ro": "0", | ||
3794 | 349 | "size": "4294967296", | ||
3795 | 350 | "start": "2048", | ||
3796 | 351 | "stat": " 19443 64216 9896724 3125 39280 65397 5207337 24270 0 26204 8488 0 0 0 0", | ||
3797 | 352 | "subsystem": "block", | ||
3798 | 353 | "uevent": "MAJOR=252\nMINOR=17\nDEVNAME=vdb1\nDEVTYPE=partition\nPARTN=1" | ||
3799 | 354 | } | ||
3800 | 355 | }, | ||
3801 | 356 | "/dev/vdc": { | ||
3802 | 357 | "DEVLINKS": "/dev/disk/by-path/pci-0000:00:06.0 /dev/disk/by-path/virtio-pci-0000:00:06.0", | ||
3803 | 358 | "DEVNAME": "/dev/vdc", | ||
3804 | 359 | "DEVPATH": "/devices/pci0000:00/0000:00:06.0/virtio4/block/vdc", | ||
3805 | 360 | "DEVTYPE": "disk", | ||
3806 | 361 | "ID_PART_TABLE_TYPE": "gpt", | ||
3807 | 362 | "ID_PART_TABLE_UUID": "c805b10b-ded9-4519-947c-bcad1d6e81ed", | ||
3808 | 363 | "ID_PATH": "pci-0000:00:06.0", | ||
3809 | 364 | "ID_PATH_TAG": "pci-0000_00_06_0", | ||
3810 | 365 | "MAJOR": "252", | ||
3811 | 366 | "MINOR": "32", | ||
3812 | 367 | "SUBSYSTEM": "block", | ||
3813 | 368 | "TAGS": ":systemd:", | ||
3814 | 369 | "USEC_INITIALIZED": "600459", | ||
3815 | 370 | "attrs": { | ||
3816 | 371 | "alignment_offset": "0", | ||
3817 | 372 | "bdi": null, | ||
3818 | 373 | "cache_type": "write back", | ||
3819 | 374 | "capability": "50", | ||
3820 | 375 | "dev": "252:32", | ||
3821 | 376 | "device": null, | ||
3822 | 377 | "discard_alignment": "0", | ||
3823 | 378 | "events": "", | ||
3824 | 379 | "events_async": "", | ||
3825 | 380 | "events_poll_msecs": "-1", | ||
3826 | 381 | "ext_range": "256", | ||
3827 | 382 | "hidden": "0", | ||
3828 | 383 | "inflight": " 0 0", | ||
3829 | 384 | "range": "16", | ||
3830 | 385 | "removable": "0", | ||
3831 | 386 | "ro": "0", | ||
3832 | 387 | "serial": "", | ||
3833 | 388 | "size": "6442450944", | ||
3834 | 389 | "stat": " 2791 749 264502 172 43737 126620 13598249 40301 0 19796 23016 0 0 0 0", | ||
3835 | 390 | "subsystem": "block", | ||
3836 | 391 | "uevent": "MAJOR=252\nMINOR=32\nDEVNAME=vdc\nDEVTYPE=disk" | ||
3837 | 392 | }, | ||
3838 | 393 | "partitiontable": { | ||
3839 | 394 | "label": "gpt", | ||
3840 | 395 | "id": "C805B10B-DED9-4519-947C-BCAD1D6E81ED", | ||
3841 | 396 | "device": "/dev/vdc", | ||
3842 | 397 | "unit": "sectors", | ||
3843 | 398 | "firstlba": 34, | ||
3844 | 399 | "lastlba": 12582878, | ||
3845 | 400 | "partitions": [ | ||
3846 | 401 | { | ||
3847 | 402 | "node": "/dev/vdc1", | ||
3848 | 403 | "start": 2048, | ||
3849 | 404 | "size": 8388608, | ||
3850 | 405 | "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4", | ||
3851 | 406 | "uuid": "69441F30-8321-4A70-A4CF-6A4B92393CD6" | ||
3852 | 407 | } | ||
3853 | 408 | ] | ||
3854 | 409 | } | ||
3855 | 410 | }, | ||
3856 | 411 | "/dev/vdc1": { | ||
3857 | 412 | "DEVLINKS": "/dev/disk/by-partuuid/69441f30-8321-4a70-a4cf-6a4b92393cd6 /dev/disk/by-path/pci-0000:00:06.0-part1 /dev/disk/by-path/virtio-pci-0000:00:06.0-part1", | ||
3858 | 413 | "DEVNAME": "/dev/vdc1", | ||
3859 | 414 | "DEVPATH": "/devices/pci0000:00/0000:00:06.0/virtio4/block/vdc/vdc1", | ||
3860 | 415 | "DEVTYPE": "partition", | ||
3861 | 416 | "ID_FS_LABEL": "ubuntu-server:1", | ||
3862 | 417 | "ID_FS_LABEL_ENC": "ubuntu-server:1", | ||
3863 | 418 | "ID_FS_TYPE": "linux_raid_member", | ||
3864 | 419 | "ID_FS_USAGE": "raid", | ||
3865 | 420 | "ID_FS_UUID": "1e4e3ac4-abd1-ee76-6fdb-871a4d6677af", | ||
3866 | 421 | "ID_FS_UUID_ENC": "1e4e3ac4-abd1-ee76-6fdb-871a4d6677af", | ||
3867 | 422 | "ID_FS_UUID_SUB": "52929a1d-d9f0-e3a9-c16e-c40433201114", | ||
3868 | 423 | "ID_FS_UUID_SUB_ENC": "52929a1d-d9f0-e3a9-c16e-c40433201114", | ||
3869 | 424 | "ID_FS_VERSION": "1.2", | ||
3870 | 425 | "ID_PART_ENTRY_DISK": "252:32", | ||
3871 | 426 | "ID_PART_ENTRY_NUMBER": "1", | ||
3872 | 427 | "ID_PART_ENTRY_OFFSET": "2048", | ||
3873 | 428 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
3874 | 429 | "ID_PART_ENTRY_SIZE": "8388608", | ||
3875 | 430 | "ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4", | ||
3876 | 431 | "ID_PART_ENTRY_UUID": "69441f30-8321-4a70-a4cf-6a4b92393cd6", | ||
3877 | 432 | "ID_PART_TABLE_TYPE": "gpt", | ||
3878 | 433 | "ID_PART_TABLE_UUID": "c805b10b-ded9-4519-947c-bcad1d6e81ed", | ||
3879 | 434 | "ID_PATH": "pci-0000:00:06.0", | ||
3880 | 435 | "ID_PATH_TAG": "pci-0000_00_06_0", | ||
3881 | 436 | "ID_SCSI": "1", | ||
3882 | 437 | "MAJOR": "252", | ||
3883 | 438 | "MINOR": "33", | ||
3884 | 439 | "PARTN": "1", | ||
3885 | 440 | "SUBSYSTEM": "block", | ||
3886 | 441 | "TAGS": ":systemd:", | ||
3887 | 442 | "USEC_INITIALIZED": "52548543", | ||
3888 | 443 | "attrs": { | ||
3889 | 444 | "alignment_offset": "0", | ||
3890 | 445 | "dev": "252:33", | ||
3891 | 446 | "discard_alignment": "0", | ||
3892 | 447 | "inflight": " 0 0", | ||
3893 | 448 | "partition": "1", | ||
3894 | 449 | "ro": "0", | ||
3895 | 450 | "size": "4294967296", | ||
3896 | 451 | "start": "2048", | ||
3897 | 452 | "stat": " 1756 749 86802 112 43601 126530 13585705 40291 0 18404 23016 0 0 0 0", | ||
3898 | 453 | "subsystem": "block", | ||
3899 | 454 | "uevent": "MAJOR=252\nMINOR=33\nDEVNAME=vdc1\nDEVTYPE=partition\nPARTN=1" | ||
3900 | 455 | } | ||
3901 | 456 | }, | ||
3902 | 457 | "/dev/vdd": { | ||
3903 | 458 | "DEVLINKS": "/dev/disk/by-path/virtio-pci-0000:00:07.0 /dev/disk/by-uuid/00c629d6-06ab-4dfd-b21e-c3186f34105d /dev/disk/by-path/pci-0000:00:07.0", | ||
3904 | 459 | "DEVNAME": "/dev/vdd", | ||
3905 | 460 | "DEVPATH": "/devices/pci0000:00/0000:00:07.0/virtio5/block/vdd", | ||
3906 | 461 | "DEVTYPE": "disk", | ||
3907 | 462 | "ID_FS_TYPE": "ext2", | ||
3908 | 463 | "ID_FS_USAGE": "filesystem", | ||
3909 | 464 | "ID_FS_UUID": "00c629d6-06ab-4dfd-b21e-c3186f34105d", | ||
3910 | 465 | "ID_FS_UUID_ENC": "00c629d6-06ab-4dfd-b21e-c3186f34105d", | ||
3911 | 466 | "ID_FS_VERSION": "1.0", | ||
3912 | 467 | "ID_PATH": "pci-0000:00:07.0", | ||
3913 | 468 | "ID_PATH_TAG": "pci-0000_00_07_0", | ||
3914 | 469 | "MAJOR": "252", | ||
3915 | 470 | "MINOR": "48", | ||
3916 | 471 | "SUBSYSTEM": "block", | ||
3917 | 472 | "TAGS": ":systemd:", | ||
3918 | 473 | "USEC_INITIALIZED": "563993", | ||
3919 | 474 | "attrs": { | ||
3920 | 475 | "alignment_offset": "0", | ||
3921 | 476 | "bdi": null, | ||
3922 | 477 | "cache_type": "write back", | ||
3923 | 478 | "capability": "50", | ||
3924 | 479 | "dev": "252:48", | ||
3925 | 480 | "device": null, | ||
3926 | 481 | "discard_alignment": "0", | ||
3927 | 482 | "events": "", | ||
3928 | 483 | "events_async": "", | ||
3929 | 484 | "events_poll_msecs": "-1", | ||
3930 | 485 | "ext_range": "256", | ||
3931 | 486 | "hidden": "0", | ||
3932 | 487 | "inflight": " 0 0", | ||
3933 | 488 | "range": "16", | ||
3934 | 489 | "removable": "0", | ||
3935 | 490 | "ro": "1", | ||
3936 | 491 | "serial": "", | ||
3937 | 492 | "size": "1048576", | ||
3938 | 493 | "stat": " 97 0 3367 4 2 0 0 0 0 76 0 0 0 0 0", | ||
3939 | 494 | "subsystem": "block", | ||
3940 | 495 | "uevent": "MAJOR=252\nMINOR=48\nDEVNAME=vdd\nDEVTYPE=disk" | ||
3941 | 496 | } | ||
3942 | 497 | }, | ||
3943 | 498 | "/dev/md1": { | ||
3944 | 499 | "DEVLINKS": "/dev/disk/by-id/md-name-ubuntu-server:1 /dev/disk/by-id/md-uuid-1e4e3ac4:abd1ee76:6fdb871a:4d6677af", | ||
3945 | 500 | "DEVNAME": "/dev/md1", | ||
3946 | 501 | "DEVPATH": "/devices/virtual/block/md1", | ||
3947 | 502 | "DEVTYPE": "disk", | ||
3948 | 503 | "ID_PART_TABLE_TYPE": "gpt", | ||
3949 | 504 | "ID_PART_TABLE_UUID": "18f354ee-3557-4a37-9508-c947edb21b5c", | ||
3950 | 505 | "MAJOR": "9", | ||
3951 | 506 | "MD_DEVICES": "2", | ||
3952 | 507 | "MD_DEVICE_ev_vdb1_DEV": "/dev/vdb1", | ||
3953 | 508 | "MD_DEVICE_ev_vdb1_ROLE": "0", | ||
3954 | 509 | "MD_DEVICE_ev_vdc1_DEV": "/dev/vdc1", | ||
3955 | 510 | "MD_DEVICE_ev_vdc1_ROLE": "1", | ||
3956 | 511 | "MD_LEVEL": "raid1", | ||
3957 | 512 | "MD_METADATA": "1.2", | ||
3958 | 513 | "MD_NAME": "ubuntu-server:1", | ||
3959 | 514 | "MD_UUID": "1e4e3ac4:abd1ee76:6fdb871a:4d6677af", | ||
3960 | 515 | "MINOR": "1", | ||
3961 | 516 | "SUBSYSTEM": "block", | ||
3962 | 517 | "SYSTEMD_WANTS": "mdmonitor.service", | ||
3963 | 518 | "TAGS": ":systemd:", | ||
3964 | 519 | "USEC_INITIALIZED": "52972570", | ||
3965 | 520 | "attrs": { | ||
3966 | 521 | "alignment_offset": "0", | ||
3967 | 522 | "bdi": null, | ||
3968 | 523 | "capability": "50", | ||
3969 | 524 | "dev": "9:1", | ||
3970 | 525 | "discard_alignment": "0", | ||
3971 | 526 | "events": "", | ||
3972 | 527 | "events_async": "", | ||
3973 | 528 | "events_poll_msecs": "-1", | ||
3974 | 529 | "ext_range": "256", | ||
3975 | 530 | "hidden": "0", | ||
3976 | 531 | "inflight": " 0 0", | ||
3977 | 532 | "range": "1", | ||
3978 | 533 | "removable": "0", | ||
3979 | 534 | "ro": "0", | ||
3980 | 535 | "size": "4289724416", | ||
3981 | 536 | "stat": " 20095 0 1539578 0 105192 0 5220984 0 0 0 0 0 0 0 0", | ||
3982 | 537 | "subsystem": "block", | ||
3983 | 538 | "uevent": "MAJOR=9\nMINOR=1\nDEVNAME=md1\nDEVTYPE=disk" | ||
3984 | 539 | }, | ||
3985 | 540 | "partitiontable": { | ||
3986 | 541 | "label": "gpt", | ||
3987 | 542 | "id": "18F354EE-3557-4A37-9508-C947EDB21B5C", | ||
3988 | 543 | "device": "/dev/md1", | ||
3989 | 544 | "unit": "sectors", | ||
3990 | 545 | "firstlba": 34, | ||
3991 | 546 | "lastlba": 8378334, | ||
3992 | 547 | "partitions": [ | ||
3993 | 548 | { | ||
3994 | 549 | "node": "/dev/md1p1", | ||
3995 | 550 | "start": 2048, | ||
3996 | 551 | "size": 8370176, | ||
3997 | 552 | "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4", | ||
3998 | 553 | "uuid": "5B3F90C0-2432-45C1-98E2-6E9E6649430E" | ||
3999 | 554 | } | ||
4000 | 555 | ] | ||
4001 | 556 | } | ||
4002 | 557 | }, | ||
4003 | 558 | "/dev/md1p1": { | ||
4004 | 559 | "DEVLINKS": "/dev/disk/by-uuid/b312e605-d330-43ad-aa9b-2d503412977d /dev/disk/by-id/md-uuid-1e4e3ac4:abd1ee76:6fdb871a:4d6677af-part1 /dev/disk/by-id/md-name-ubuntu-server:1-part1", | ||
4005 | 560 | "DEVNAME": "/dev/md1p1", | ||
4006 | 561 | "DEVPATH": "/devices/virtual/block/md1/md1p1", | ||
4007 | 562 | "DEVTYPE": "partition", | ||
4008 | 563 | "ID_FS_TYPE": "ext4", | ||
4009 | 564 | "ID_FS_USAGE": "filesystem", | ||
4010 | 565 | "ID_FS_UUID": "b312e605-d330-43ad-aa9b-2d503412977d", | ||
4011 | 566 | "ID_FS_UUID_ENC": "b312e605-d330-43ad-aa9b-2d503412977d", | ||
4012 | 567 | "ID_FS_VERSION": "1.0", | ||
4013 | 568 | "ID_PART_ENTRY_DISK": "9:1", | ||
4014 | 569 | "ID_PART_ENTRY_NUMBER": "1", | ||
4015 | 570 | "ID_PART_ENTRY_OFFSET": "2048", | ||
4016 | 571 | "ID_PART_ENTRY_SCHEME": "gpt", | ||
4017 | 572 | "ID_PART_ENTRY_SIZE": "8370176", | ||
4018 | 573 | "ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4", | ||
4019 | 574 | "ID_PART_ENTRY_UUID": "5b3f90c0-2432-45c1-98e2-6e9e6649430e", | ||
4020 | 575 | "ID_SCSI": "1", | ||
4021 | 576 | "MAJOR": "259", | ||
4022 | 577 | "MD_DEVICES": "2", | ||
4023 | 578 | "MD_DEVICE_ev_vdb1_DEV": "/dev/vdb1", | ||
4024 | 579 | "MD_DEVICE_ev_vdb1_ROLE": "0", | ||
4025 | 580 | "MD_DEVICE_ev_vdc1_DEV": "/dev/vdc1", | ||
4026 | 581 | "MD_DEVICE_ev_vdc1_ROLE": "1", | ||
4027 | 582 | "MD_LEVEL": "raid1", | ||
4028 | 583 | "MD_METADATA": "1.2", | ||
4029 | 584 | "MD_NAME": "ubuntu-server:1", | ||
4030 | 585 | "MD_UUID": "1e4e3ac4:abd1ee76:6fdb871a:4d6677af", | ||
4031 | 586 | "MINOR": "1", | ||
4032 | 587 | "PARTN": "1", | ||
4033 | 588 | "SUBSYSTEM": "block", | ||
4034 | 589 | "SYSTEMD_WANTS": "mdmonitor.service", | ||
4035 | 590 | "TAGS": ":systemd:", | ||
4036 | 591 | "USEC_INITIALIZED": "62053949", | ||
4037 | 592 | "attrs": { | ||
4038 | 593 | "alignment_offset": "0", | ||
4039 | 594 | "dev": "259:1", | ||
4040 | 595 | "discard_alignment": "0", | ||
4041 | 596 | "inflight": " 0 0", | ||
4042 | 597 | "partition": "1", | ||
4043 | 598 | "ro": "0", | ||
4044 | 599 | "size": "4285530112", | ||
4045 | 600 | "start": "2048", | ||
4046 | 601 | "stat": " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", | ||
4047 | 602 | "subsystem": "block", | ||
4048 | 603 | "uevent": "MAJOR=259\nMINOR=1\nDEVNAME=md1p1\nDEVTYPE=partition\nPARTN=1" | ||
4049 | 604 | } | ||
4050 | 605 | } | ||
4051 | 606 | }, | ||
4052 | 607 | "bcache": { | ||
4053 | 608 | "backing": {}, | ||
4054 | 609 | "caching": {} | ||
4055 | 610 | }, | ||
4056 | 611 | "lvm": {}, | ||
4057 | 612 | "mount": [ | ||
4058 | 613 | { | ||
4059 | 614 | "target": "/", | ||
4060 | 615 | "source": "/cow", | ||
4061 | 616 | "fstype": "overlay", | ||
4062 | 617 | "options": "rw,relatime,lowerdir=/installer.squashfs:/filesystem.squashfs,upperdir=/cow/upper,workdir=/cow/work", | ||
4063 | 618 | "children": [ | ||
4064 | 619 | { | ||
4065 | 620 | "target": "/sys", | ||
4066 | 621 | "source": "sysfs", | ||
4067 | 622 | "fstype": "sysfs", | ||
4068 | 623 | "options": "rw,nosuid,nodev,noexec,relatime", | ||
4069 | 624 | "children": [ | ||
4070 | 625 | { | ||
4071 | 626 | "target": "/sys/kernel/security", | ||
4072 | 627 | "source": "securityfs", | ||
4073 | 628 | "fstype": "securityfs", | ||
4074 | 629 | "options": "rw,nosuid,nodev,noexec,relatime" | ||
4075 | 630 | }, | ||
4076 | 631 | { | ||
4077 | 632 | "target": "/sys/fs/cgroup", | ||
4078 | 633 | "source": "tmpfs", | ||
4079 | 634 | "fstype": "tmpfs", | ||
4080 | 635 | "options": "ro,nosuid,nodev,noexec,mode=755", | ||
4081 | 636 | "children": [ | ||
4082 | 637 | { | ||
4083 | 638 | "target": "/sys/fs/cgroup/unified", | ||
4084 | 639 | "source": "cgroup2", | ||
4085 | 640 | "fstype": "cgroup2", | ||
4086 | 641 | "options": "rw,nosuid,nodev,noexec,relatime,nsdelegate" | ||
4087 | 642 | }, | ||
4088 | 643 | { | ||
4089 | 644 | "target": "/sys/fs/cgroup/systemd", | ||
4090 | 645 | "source": "cgroup", | ||
4091 | 646 | "fstype": "cgroup", | ||
4092 | 647 | "options": "rw,nosuid,nodev,noexec,relatime,xattr,name=systemd" | ||
4093 | 648 | }, | ||
4094 | 649 | { | ||
4095 | 650 | "target": "/sys/fs/cgroup/freezer", | ||
4096 | 651 | "source": "cgroup", | ||
4097 | 652 | "fstype": "cgroup", | ||
4098 | 653 | "options": "rw,nosuid,nodev,noexec,relatime,freezer" | ||
4099 | 654 | }, | ||
4100 | 655 | { | ||
4101 | 656 | "target": "/sys/fs/cgroup/pids", | ||
4102 | 657 | "source": "cgroup", | ||
4103 | 658 | "fstype": "cgroup", | ||
4104 | 659 | "options": "rw,nosuid,nodev,noexec,relatime,pids" | ||
4105 | 660 | }, | ||
4106 | 661 | { | ||
4107 | 662 | "target": "/sys/fs/cgroup/cpuset", | ||
4108 | 663 | "source": "cgroup", | ||
4109 | 664 | "fstype": "cgroup", | ||
4110 | 665 | "options": "rw,nosuid,nodev,noexec,relatime,cpuset" | ||
4111 | 666 | }, | ||
4112 | 667 | { | ||
4113 | 668 | "target": "/sys/fs/cgroup/cpu,cpuacct", | ||
4114 | 669 | "source": "cgroup", | ||
4115 | 670 | "fstype": "cgroup", | ||
4116 | 671 | "options": "rw,nosuid,nodev,noexec,relatime,cpu,cpuacct" | ||
4117 | 672 | }, | ||
4118 | 673 | { | ||
4119 | 674 | "target": "/sys/fs/cgroup/blkio", | ||
4120 | 675 | "source": "cgroup", | ||
4121 | 676 | "fstype": "cgroup", | ||
4122 | 677 | "options": "rw,nosuid,nodev,noexec,relatime,blkio" | ||
4123 | 678 | }, | ||
4124 | 679 | { | ||
4125 | 680 | "target": "/sys/fs/cgroup/net_cls,net_prio", | ||
4126 | 681 | "source": "cgroup", | ||
4127 | 682 | "fstype": "cgroup", | ||
4128 | 683 | "options": "rw,nosuid,nodev,noexec,relatime,net_cls,net_prio" | ||
4129 | 684 | }, | ||
4130 | 685 | { | ||
4131 | 686 | "target": "/sys/fs/cgroup/rdma", | ||
4132 | 687 | "source": "cgroup", | ||
4133 | 688 | "fstype": "cgroup", | ||
4134 | 689 | "options": "rw,nosuid,nodev,noexec,relatime,rdma" | ||
4135 | 690 | }, | ||
4136 | 691 | { | ||
4137 | 692 | "target": "/sys/fs/cgroup/devices", | ||
4138 | 693 | "source": "cgroup", | ||
4139 | 694 | "fstype": "cgroup", | ||
4140 | 695 | "options": "rw,nosuid,nodev,noexec,relatime,devices" | ||
4141 | 696 | }, | ||
4142 | 697 | { | ||
4143 | 698 | "target": "/sys/fs/cgroup/memory", | ||
4144 | 699 | "source": "cgroup", | ||
4145 | 700 | "fstype": "cgroup", | ||
4146 | 701 | "options": "rw,nosuid,nodev,noexec,relatime,memory" | ||
4147 | 702 | }, | ||
4148 | 703 | { | ||
4149 | 704 | "target": "/sys/fs/cgroup/perf_event", | ||
4150 | 705 | "source": "cgroup", | ||
4151 | 706 | "fstype": "cgroup", | ||
4152 | 707 | "options": "rw,nosuid,nodev,noexec,relatime,perf_event" | ||
4153 | 708 | }, | ||
4154 | 709 | { | ||
4155 | 710 | "target": "/sys/fs/cgroup/hugetlb", | ||
4156 | 711 | "source": "cgroup", | ||
4157 | 712 | "fstype": "cgroup", | ||
4158 | 713 | "options": "rw,nosuid,nodev,noexec,relatime,hugetlb" | ||
4159 | 714 | } | ||
4160 | 715 | ] | ||
4161 | 716 | }, | ||
4162 | 717 | { | ||
4163 | 718 | "target": "/sys/fs/pstore", | ||
4164 | 719 | "source": "pstore", | ||
4165 | 720 | "fstype": "pstore", | ||
4166 | 721 | "options": "rw,nosuid,nodev,noexec,relatime" | ||
4167 | 722 | }, | ||
4168 | 723 | { | ||
4169 | 724 | "target": "/sys/fs/bpf", | ||
4170 | 725 | "source": "bpf", | ||
4171 | 726 | "fstype": "bpf", | ||
4172 | 727 | "options": "rw,nosuid,nodev,noexec,relatime,mode=700" | ||
4173 | 728 | }, | ||
4174 | 729 | { | ||
4175 | 730 | "target": "/sys/kernel/debug", | ||
4176 | 731 | "source": "debugfs", | ||
4177 | 732 | "fstype": "debugfs", | ||
4178 | 733 | "options": "rw,nosuid,nodev,noexec,relatime" | ||
4179 | 734 | }, | ||
4180 | 735 | { | ||
4181 | 736 | "target": "/sys/fs/fuse/connections", | ||
4182 | 737 | "source": "fusectl", | ||
4183 | 738 | "fstype": "fusectl", | ||
4184 | 739 | "options": "rw,nosuid,nodev,noexec,relatime" | ||
4185 | 740 | }, | ||
4186 | 741 | { | ||
4187 | 742 | "target": "/sys/kernel/config", | ||
4188 | 743 | "source": "configfs", | ||
4189 | 744 | "fstype": "configfs", | ||
4190 | 745 | "options": "rw,nosuid,nodev,noexec,relatime" | ||
4191 | 746 | } | ||
4192 | 747 | ] | ||
4193 | 748 | }, | ||
4194 | 749 | { | ||
4195 | 750 | "target": "/proc", | ||
4196 | 751 | "source": "proc", | ||
4197 | 752 | "fstype": "proc", | ||
4198 | 753 | "options": "rw,nosuid,nodev,noexec,relatime", | ||
4199 | 754 | "children": [ | ||
4200 | 755 | { | ||
4201 | 756 | "target": "/proc/sys/fs/binfmt_misc", | ||
4202 | 757 | "source": "systemd-1", | ||
4203 | 758 | "fstype": "autofs", | ||
4204 | 759 | "options": "rw,relatime,fd=27,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13520" | ||
4205 | 760 | } | ||
4206 | 761 | ] | ||
4207 | 762 | }, | ||
4208 | 763 | { | ||
4209 | 764 | "target": "/dev", | ||
4210 | 765 | "source": "udev", | ||
4211 | 766 | "fstype": "devtmpfs", | ||
4212 | 767 | "options": "rw,nosuid,relatime,size=956672k,nr_inodes=14948,mode=755", | ||
4213 | 768 | "children": [ | ||
4214 | 769 | { | ||
4215 | 770 | "target": "/dev/pts", | ||
4216 | 771 | "source": "devpts", | ||
4217 | 772 | "fstype": "devpts", | ||
4218 | 773 | "options": "rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000" | ||
4219 | 774 | }, | ||
4220 | 775 | { | ||
4221 | 776 | "target": "/dev/shm", | ||
4222 | 777 | "source": "tmpfs", | ||
4223 | 778 | "fstype": "tmpfs", | ||
4224 | 779 | "options": "rw,nosuid,nodev" | ||
4225 | 780 | }, | ||
4226 | 781 | { | ||
4227 | 782 | "target": "/dev/mqueue", | ||
4228 | 783 | "source": "mqueue", | ||
4229 | 784 | "fstype": "mqueue", | ||
4230 | 785 | "options": "rw,nosuid,nodev,noexec,relatime" | ||
4231 | 786 | } | ||
4232 | 787 | ] | ||
4233 | 788 | }, | ||
4234 | 789 | { | ||
4235 | 790 | "target": "/run", | ||
4236 | 791 | "source": "tmpfs", | ||
4237 | 792 | "fstype": "tmpfs", | ||
4238 | 793 | "options": "rw,nosuid,noexec,relatime,size=206720k,mode=755", | ||
4239 | 794 | "children": [ | ||
4240 | 795 | { | ||
4241 | 796 | "target": "/run/lock", | ||
4242 | 797 | "source": "tmpfs", | ||
4243 | 798 | "fstype": "tmpfs", | ||
4244 | 799 | "options": "rw,nosuid,nodev,noexec,relatime,size=5120k" | ||
4245 | 800 | } | ||
4246 | 801 | ] | ||
4247 | 802 | }, | ||
4248 | 803 | { | ||
4249 | 804 | "target": "/cdrom", | ||
4250 | 805 | "source": "/dev/sr0", | ||
4251 | 806 | "fstype": "iso9660", | ||
4252 | 807 | "options": "ro,noatime,nojoliet,check=s,map=n,blocksize=2048" | ||
4253 | 808 | }, | ||
4254 | 809 | { | ||
4255 | 810 | "target": "/rofs", | ||
4256 | 811 | "source": "/dev/loop0", | ||
4257 | 812 | "fstype": "squashfs", | ||
4258 | 813 | "options": "ro,noatime" | ||
4259 | 814 | }, | ||
4260 | 815 | { | ||
4261 | 816 | "target": "/usr/lib/modules", | ||
4262 | 817 | "source": "/dev/loop2", | ||
4263 | 818 | "fstype": "squashfs", | ||
4264 | 819 | "options": "ro,relatime" | ||
4265 | 820 | }, | ||
4266 | 821 | { | ||
4267 | 822 | "target": "/media/filesystem", | ||
4268 | 823 | "source": "/dev/loop0", | ||
4269 | 824 | "fstype": "squashfs", | ||
4270 | 825 | "options": "ro,relatime" | ||
4271 | 826 | }, | ||
4272 | 827 | { | ||
4273 | 828 | "target": "/tmp", | ||
4274 | 829 | "source": "tmpfs", | ||
4275 | 830 | "fstype": "tmpfs", | ||
4276 | 831 | "options": "rw,nosuid,nodev,relatime" | ||
4277 | 832 | }, | ||
4278 | 833 | { | ||
4279 | 834 | "target": "/subiquity_config", | ||
4280 | 835 | "source": "/dev/vdd", | ||
4281 | 836 | "fstype": "ext4", | ||
4282 | 837 | "options": "ro,relatime" | ||
4283 | 838 | }, | ||
4284 | 839 | { | ||
4285 | 840 | "target": "/snap/core/8041", | ||
4286 | 841 | "source": "/dev/loop3", | ||
4287 | 842 | "fstype": "squashfs", | ||
4288 | 843 | "options": "ro,nodev,relatime" | ||
4289 | 844 | }, | ||
4290 | 845 | { | ||
4291 | 846 | "target": "/snap/subiquity/1335", | ||
4292 | 847 | "source": "/dev/loop4", | ||
4293 | 848 | "fstype": "squashfs", | ||
4294 | 849 | "options": "ro,nodev,relatime" | ||
4295 | 850 | }, | ||
4296 | 851 | { | ||
4297 | 852 | "target": "/target", | ||
4298 | 853 | "source": "/dev/md1p1", | ||
4299 | 854 | "fstype": "ext4", | ||
4300 | 855 | "options": "rw,relatime", | ||
4301 | 856 | "children": [ | ||
4302 | 857 | { | ||
4303 | 858 | "target": "/target/run", | ||
4304 | 859 | "source": "tmpfs", | ||
4305 | 860 | "fstype": "tmpfs", | ||
4306 | 861 | "options": "rw,nosuid,noexec,relatime,size=206720k,mode=755" | ||
4307 | 862 | }, | ||
4308 | 863 | { | ||
4309 | 864 | "target": "/target/boot", | ||
4310 | 865 | "source": "/dev/vda2", | ||
4311 | 866 | "fstype": "ext4", | ||
4312 | 867 | "options": "rw,relatime" | ||
4313 | 868 | }, | ||
4314 | 869 | { | ||
4315 | 870 | "target": "/target/etc/apt", | ||
4316 | 871 | "source": "overlay", | ||
4317 | 872 | "fstype": "overlay", | ||
4318 | 873 | "options": "rw,relatime,lowerdir=/target/etc/apt,upperdir=/tmp/tmp.dFi4ai53r1/upper,workdir=/tmp/tmp.dFi4ai53r1/work" | ||
4319 | 874 | }, | ||
4320 | 875 | { | ||
4321 | 876 | "target": "/target/cdrom", | ||
4322 | 877 | "source": "/dev/sr0", | ||
4323 | 878 | "fstype": "iso9660", | ||
4324 | 879 | "options": "ro,noatime,nojoliet,check=s,map=n,blocksize=2048" | ||
4325 | 880 | } | ||
4326 | 881 | ] | ||
4327 | 882 | } | ||
4328 | 883 | ] | ||
4329 | 884 | } | ||
4330 | 885 | ], | ||
4331 | 886 | "filesystem": { | ||
4332 | 887 | "/dev/sr0": { | ||
4333 | 888 | "APPLICATION_ID": "GENISOIMAGE\\x20ISO\\x209660\\x2fHFS\\x20FILESYSTEM\\x20CREATOR\\x20\\x28C\\x29\\x201993\\x20E.YOUNGDALE\\x20\\x28C\\x29\\x201997-2006\\x20J.PEARSON\\x2fJ.SCHILLING\\x20\\x28C\\x29\\x202006-2007\\x20CDRKIT\\x20TEAM", | ||
4334 | 889 | "LABEL": "Ubuntu-Server_20.04_LTS_ppc64", | ||
4335 | 890 | "LABEL_ENC": "Ubuntu-Server\\x2020.04\\x20LTS\\x20ppc64", | ||
4336 | 891 | "SYSTEM_ID": "LINUX", | ||
4337 | 892 | "TYPE": "iso9660", | ||
4338 | 893 | "USAGE": "filesystem", | ||
4339 | 894 | "UUID": "2019-11-16-08-09-20-00", | ||
4340 | 895 | "UUID_ENC": "2019-11-16-08-09-20-00" | ||
4341 | 896 | }, | ||
4342 | 897 | "/dev/vda2": { | ||
4343 | 898 | "TYPE": "ext4", | ||
4344 | 899 | "USAGE": "filesystem", | ||
4345 | 900 | "UUID": "0a3b5403-d358-4f30-9094-e5a19d60b222", | ||
4346 | 901 | "UUID_ENC": "0a3b5403-d358-4f30-9094-e5a19d60b222", | ||
4347 | 902 | "VERSION": "1.0" | ||
4348 | 903 | }, | ||
4349 | 904 | "/dev/vdd": { | ||
4350 | 905 | "TYPE": "ext2", | ||
4351 | 906 | "USAGE": "filesystem", | ||
4352 | 907 | "UUID": "00c629d6-06ab-4dfd-b21e-c3186f34105d", | ||
4353 | 908 | "UUID_ENC": "00c629d6-06ab-4dfd-b21e-c3186f34105d", | ||
4354 | 909 | "VERSION": "1.0" | ||
4355 | 910 | }, | ||
4356 | 911 | "/dev/md1p1": { | ||
4357 | 912 | "TYPE": "ext4", | ||
4358 | 913 | "USAGE": "filesystem", | ||
4359 | 914 | "UUID": "b312e605-d330-43ad-aa9b-2d503412977d", | ||
4360 | 915 | "UUID_ENC": "b312e605-d330-43ad-aa9b-2d503412977d", | ||
4361 | 916 | "VERSION": "1.0" | ||
4362 | 917 | } | ||
4363 | 918 | }, | ||
4364 | 919 | "raid": { | ||
4365 | 920 | "/dev/md1": { | ||
4366 | 921 | "DEVLINKS": "/dev/disk/by-id/md-name-ubuntu-server:1 /dev/disk/by-id/md-uuid-1e4e3ac4:abd1ee76:6fdb871a:4d6677af", | ||
4367 | 922 | "DEVNAME": "/dev/md1", | ||
4368 | 923 | "DEVPATH": "/devices/virtual/block/md1", | ||
4369 | 924 | "DEVTYPE": "disk", | ||
4370 | 925 | "ID_PART_TABLE_TYPE": "gpt", | ||
4371 | 926 | "ID_PART_TABLE_UUID": "18f354ee-3557-4a37-9508-c947edb21b5c", | ||
4372 | 927 | "MAJOR": "9", | ||
4373 | 928 | "MD_DEVICES": "2", | ||
4374 | 929 | "MD_DEVICE_ev_vdb1_DEV": "/dev/vdb1", | ||
4375 | 930 | "MD_DEVICE_ev_vdb1_ROLE": "0", | ||
4376 | 931 | "MD_DEVICE_ev_vdc1_DEV": "/dev/vdc1", | ||
4377 | 932 | "MD_DEVICE_ev_vdc1_ROLE": "1", | ||
4378 | 933 | "MD_LEVEL": "raid1", | ||
4379 | 934 | "MD_METADATA": "1.2", | ||
4380 | 935 | "MD_NAME": "ubuntu-server:1", | ||
4381 | 936 | "MD_UUID": "1e4e3ac4:abd1ee76:6fdb871a:4d6677af", | ||
4382 | 937 | "MINOR": "1", | ||
4383 | 938 | "SUBSYSTEM": "block", | ||
4384 | 939 | "SYSTEMD_WANTS": "mdmonitor.service", | ||
4385 | 940 | "TAGS": ":systemd:", | ||
4386 | 941 | "USEC_INITIALIZED": "52972570", | ||
4387 | 942 | "raidlevel": "raid1", | ||
4388 | 943 | "devices": [ | ||
4389 | 944 | "/dev/vdb1", | ||
4390 | 945 | "/dev/vdc1" | ||
4391 | 946 | ], | ||
4392 | 947 | "spare_devices": [] | ||
4393 | 948 | } | ||
4394 | 949 | }, | ||
4395 | 950 | "multipath": {} | ||
4396 | 951 | } | ||
4397 | diff --git a/tests/data/probert_storage_zlp6.json b/tests/data/probert_storage_zlp6.json | |||
4398 | 0 | new file mode 100644 | 952 | new file mode 100644 |
4399 | index 0000000..b56a02b | |||
4400 | --- /dev/null | |||
4401 | +++ b/tests/data/probert_storage_zlp6.json | |||
4402 | @@ -0,0 +1,6980 @@ | |||
4403 | 1 | { | ||
4404 | 2 | "storage": { | ||
4405 | 3 | "bcache": { | ||
4406 | 4 | "backing": {}, | ||
4407 | 5 | "caching": {} | ||
4408 | 6 | }, | ||
4409 | 7 | "blockdev": { | ||
4410 | 8 | "/dev/dasda": { | ||
4411 | 9 | "DEVLINKS": "/dev/disk/by-id/ccw-IBM.750000000DXP71.1500.20 /dev/disk/by-path/ccw-0.0.1520 /dev/disk/by-uuid/3f168f0c-d0c7-4d8b-b23d-92c7476b092b", | ||
4412 | 10 | "DEVNAME": "/dev/dasda", | ||
4413 | 11 | "DEVPATH": "/devices/css0/0.0.0180/0.0.1520/block/dasda", | ||
4414 | 12 | "DEVTYPE": "disk", | ||
4415 | 13 | "ID_BUS": "ccw", | ||
4416 | 14 | "ID_FS_TYPE": "bcache", | ||
4417 | 15 | "ID_FS_UUID": "3f168f0c-d0c7-4d8b-b23d-92c7476b092b", | ||
4418 | 16 | "ID_FS_UUID_ENC": "3f168f0c-d0c7-4d8b-b23d-92c7476b092b", | ||
4419 | 17 | "ID_PATH": "ccw-0.0.1520", | ||
4420 | 18 | "ID_PATH_TAG": "ccw-0_0_1520", | ||
4421 | 19 | "ID_TYPE": "disk", | ||
4422 | 20 | "ID_UID": "IBM.750000000DXP71.1500.20", | ||
4423 | 21 | "ID_XUID": "IBM.750000000DXP71.1500.20", | ||
4424 | 22 | "MAJOR": "94", | ||
4425 | 23 | "MINOR": "0", | ||
4426 | 24 | "MPATH_SBIN_PATH": "/sbin", | ||
4427 | 25 | "SUBSYSTEM": "block", | ||
4428 | 26 | "TAGS": ":systemd:", | ||
4429 | 27 | "USEC_INITIALIZED": "9522332", | ||
4430 | 28 | "attrs": { | ||
4431 | 29 | "alignment_offset": "0", | ||
4432 | 30 | "bdi": null, | ||
4433 | 31 | "capability": "10", | ||
4434 | 32 | "dev": "94:0", | ||
4435 | 33 | "device": null, | ||
4436 | 34 | "discard_alignment": "0", | ||
4437 | 35 | "ext_range": "4", | ||
4438 | 36 | "hidden": "0", | ||
4439 | 37 | "inflight": " 0 0", | ||
4440 | 38 | "range": "4", | ||
4441 | 39 | "removable": "0", | ||
4442 | 40 | "ro": "0", | ||
4443 | 41 | "size": "59082670080", | ||
4444 | 42 | "stat": " 16869 0 1012184 2450 12685 171372 4061544 74710 0 56227200 56332580", | ||
4445 | 43 | "subsystem": "block", | ||
4446 | 44 | "uevent": "MAJOR=94\nMINOR=0\nDEVNAME=dasda\nDEVTYPE=disk" | ||
4447 | 45 | } | ||
4448 | 46 | }, | ||
4449 | 47 | "/dev/dasdb": { | ||
4450 | 48 | "DEVLINKS": "/dev/disk/by-id/ccw-IBM.750000000DXP71.1500.1f /dev/disk/by-id/ccw-0X151F /dev/disk/by-path/ccw-0.0.151f", | ||
4451 | 49 | "DEVNAME": "/dev/dasdb", | ||
4452 | 50 | "DEVPATH": "/devices/css0/0.0.017f/0.0.151f/block/dasdb", | ||
4453 | 51 | "DEVTYPE": "disk", | ||
4454 | 52 | "ID_BUS": "ccw", | ||
4455 | 53 | "ID_PATH": "ccw-0.0.151f", | ||
4456 | 54 | "ID_PATH_TAG": "ccw-0_0_151f", | ||
4457 | 55 | "ID_SERIAL": "0X151F", | ||
4458 | 56 | "ID_TYPE": "disk", | ||
4459 | 57 | "ID_UID": "IBM.750000000DXP71.1500.1f", | ||
4460 | 58 | "ID_XUID": "IBM.750000000DXP71.1500.1f", | ||
4461 | 59 | "MAJOR": "94", | ||
4462 | 60 | "MINOR": "4", | ||
4463 | 61 | "MPATH_SBIN_PATH": "/sbin", | ||
4464 | 62 | "SUBSYSTEM": "block", | ||
4465 | 63 | "TAGS": ":systemd:", | ||
4466 | 64 | "USEC_INITIALIZED": "9552537", | ||
4467 | 65 | "attrs": { | ||
4468 | 66 | "alignment_offset": "0", | ||
4469 | 67 | "bdi": null, | ||
4470 | 68 | "capability": "10", | ||
4471 | 69 | "dev": "94:4", | ||
4472 | 70 | "device": null, | ||
4473 | 71 | "discard_alignment": "0", | ||
4474 | 72 | "ext_range": "4", | ||
4475 | 73 | "hidden": "0", | ||
4476 | 74 | "inflight": " 0 0", | ||
4477 | 75 | "range": "4", | ||
4478 | 76 | "removable": "0", | ||
4479 | 77 | "ro": "0", | ||
4480 | 78 | "size": "59082670080", | ||
4481 | 79 | "stat": " 2590 0 61872 750 0 0 0 0 0 1514773090 1514775410", | ||
4482 | 80 | "subsystem": "block", | ||
4483 | 81 | "uevent": "MAJOR=94\nMINOR=4\nDEVNAME=dasdb\nDEVTYPE=disk" | ||
4484 | 82 | } | ||
4485 | 83 | }, | ||
4486 | 84 | "/dev/dasdb1": { | ||
4487 | 85 | "DEVLINKS": "/dev/disk/by-uuid/45824f3e-2b61-48c6-912f-6142ce21827c /dev/disk/by-id/ccw-IBM.750000000DXP71.1500.1f-part1 /dev/disk/by-path/ccw-0.0.151f-part1 /dev/disk/by-id/ccw-0X151F-part1", | ||
4488 | 86 | "DEVNAME": "/dev/dasdb1", | ||
4489 | 87 | "DEVPATH": "/devices/css0/0.0.017f/0.0.151f/block/dasdb/dasdb1", | ||
4490 | 88 | "DEVTYPE": "partition", | ||
4491 | 89 | "ID_BUS": "ccw", | ||
4492 | 90 | "ID_FS_TYPE": "ext4", | ||
4493 | 91 | "ID_FS_USAGE": "filesystem", | ||
4494 | 92 | "ID_FS_UUID": "45824f3e-2b61-48c6-912f-6142ce21827c", | ||
4495 | 93 | "ID_FS_UUID_ENC": "45824f3e-2b61-48c6-912f-6142ce21827c", | ||
4496 | 94 | "ID_FS_VERSION": "1.0", | ||
4497 | 95 | "ID_PATH": "ccw-0.0.151f", | ||
4498 | 96 | "ID_PATH_TAG": "ccw-0_0_151f", | ||
4499 | 97 | "ID_SCSI": "1", | ||
4500 | 98 | "ID_SERIAL": "0X151F", | ||
4501 | 99 | "ID_TYPE": "disk", | ||
4502 | 100 | "ID_UID": "IBM.750000000DXP71.1500.1f", | ||
4503 | 101 | "ID_XUID": "IBM.750000000DXP71.1500.1f", | ||
4504 | 102 | "MAJOR": "94", | ||
4505 | 103 | "MINOR": "5", | ||
4506 | 104 | "PARTN": "1", | ||
4507 | 105 | "SUBSYSTEM": "block", | ||
4508 | 106 | "TAGS": ":systemd:", | ||
4509 | 107 | "USEC_INITIALIZED": "1279563953260", | ||
4510 | 108 | "attrs": { | ||
4511 | 109 | "alignment_offset": "0", | ||
4512 | 110 | "dev": "94:5", | ||
4513 | 111 | "discard_alignment": "0", | ||
4514 | 112 | "inflight": " 0 0", | ||
4515 | 113 | "partition": "1", | ||
4516 | 114 | "ro": "0", | ||
4517 | 115 | "size": "6144000000", | ||
4518 | 116 | "start": "192", | ||
4519 | 117 | "stat": " 128 0 5568 160 0 0 0 0 0 280 280", | ||
4520 | 118 | "subsystem": "block", | ||
4521 | 119 | "uevent": "MAJOR=94\nMINOR=5\nDEVNAME=dasdb1\nDEVTYPE=partition\nPARTN=1" | ||
4522 | 120 | } | ||
4523 | 121 | }, | ||
4524 | 122 | "/dev/dasdb2": { | ||
4525 | 123 | "DEVLINKS": "/dev/disk/by-id/ccw-0X151F-part2 /dev/disk/by-id/ccw-IBM.750000000DXP71.1500.1f-part2 /dev/disk/by-uuid/07c44238-17da-4548-8f94-046e5c1251d3 /dev/disk/by-path/ccw-0.0.151f-part2", | ||
4526 | 124 | "DEVNAME": "/dev/dasdb2", | ||
4527 | 125 | "DEVPATH": "/devices/css0/0.0.017f/0.0.151f/block/dasdb/dasdb2", | ||
4528 | 126 | "DEVTYPE": "partition", | ||
4529 | 127 | "ID_BUS": "ccw", | ||
4530 | 128 | "ID_FS_TYPE": "crypto_LUKS", | ||
4531 | 129 | "ID_FS_USAGE": "crypto", | ||
4532 | 130 | "ID_FS_UUID": "07c44238-17da-4548-8f94-046e5c1251d3", | ||
4533 | 131 | "ID_FS_UUID_ENC": "07c44238-17da-4548-8f94-046e5c1251d3", | ||
4534 | 132 | "ID_FS_VERSION": "2", | ||
4535 | 133 | "ID_PATH": "ccw-0.0.151f", | ||
4536 | 134 | "ID_PATH_TAG": "ccw-0_0_151f", | ||
4537 | 135 | "ID_SCSI": "1", | ||
4538 | 136 | "ID_SERIAL": "0X151F", | ||
4539 | 137 | "ID_TYPE": "disk", | ||
4540 | 138 | "ID_UID": "IBM.750000000DXP71.1500.1f", | ||
4541 | 139 | "ID_XUID": "IBM.750000000DXP71.1500.1f", | ||
4542 | 140 | "MAJOR": "94", | ||
4543 | 141 | "MINOR": "6", | ||
4544 | 142 | "PARTN": "2", | ||
4545 | 143 | "SUBSYSTEM": "block", | ||
4546 | 144 | "TAGS": ":systemd:", | ||
4547 | 145 | "USEC_INITIALIZED": "1279563871011", | ||
4548 | 146 | "attrs": { | ||
4549 | 147 | "alignment_offset": "0", | ||
4550 | 148 | "dev": "94:6", | ||
4551 | 149 | "discard_alignment": "0", | ||
4552 | 150 | "inflight": " 0 0", | ||
4553 | 151 | "partition": "2", | ||
4554 | 152 | "ro": "0", | ||
4555 | 153 | "size": "52937490432", | ||
4556 | 154 | "start": "1500192", | ||
4557 | 155 | "stat": " 113 0 1832 200 0 0 0 0 0 230 320", | ||
4558 | 156 | "subsystem": "block", | ||
4559 | 157 | "uevent": "MAJOR=94\nMINOR=6\nDEVNAME=dasdb2\nDEVTYPE=partition\nPARTN=2" | ||
4560 | 158 | } | ||
4561 | 159 | }, | ||
4562 | 160 | "/dev/dasdc": { | ||
4563 | 161 | "DEVLINKS": "/dev/disk/by-path/ccw-0.0.1522 /dev/disk/by-id/ccw-IBM.750000000DXP71.1500.22 /dev/disk/by-id/ccw-0X1522", | ||
4564 | 162 | "DEVNAME": "/dev/dasdc", | ||
4565 | 163 | "DEVPATH": "/devices/css0/0.0.0182/0.0.1522/block/dasdc", | ||
4566 | 164 | "DEVTYPE": "disk", | ||
4567 | 165 | "ID_BUS": "ccw", | ||
4568 | 166 | "ID_PATH": "ccw-0.0.1522", | ||
4569 | 167 | "ID_PATH_TAG": "ccw-0_0_1522", | ||
4570 | 168 | "ID_SERIAL": "0X1522", | ||
4571 | 169 | "ID_TYPE": "disk", | ||
4572 | 170 | "ID_UID": "IBM.750000000DXP71.1500.22", | ||
4573 | 171 | "ID_XUID": "IBM.750000000DXP71.1500.22", | ||
4574 | 172 | "MAJOR": "94", | ||
4575 | 173 | "MINOR": "8", | ||
4576 | 174 | "MPATH_SBIN_PATH": "/sbin", | ||
4577 | 175 | "SUBSYSTEM": "block", | ||
4578 | 176 | "TAGS": ":systemd:", | ||
4579 | 177 | "USEC_INITIALIZED": "9503072", | ||
4580 | 178 | "attrs": { | ||
4581 | 179 | "alignment_offset": "0", | ||
4582 | 180 | "bdi": null, | ||
4583 | 181 | "capability": "10", | ||
4584 | 182 | "dev": "94:8", | ||
4585 | 183 | "device": null, | ||
4586 | 184 | "discard_alignment": "0", | ||
4587 | 185 | "ext_range": "4", | ||
4588 | 186 | "hidden": "0", | ||
4589 | 187 | "inflight": " 0 0", | ||
4590 | 188 | "range": "4", | ||
4591 | 189 | "removable": "0", | ||
4592 | 190 | "ro": "0", | ||
4593 | 191 | "size": "59082670080", | ||
4594 | 192 | "stat": " 46350 0 3209608 4010 55144 368331 13826720 190440 0 1083958950 1084285940", | ||
4595 | 193 | "subsystem": "block", | ||
4596 | 194 | "uevent": "MAJOR=94\nMINOR=8\nDEVNAME=dasdc\nDEVTYPE=disk" | ||
4597 | 195 | } | ||
4598 | 196 | }, | ||
4599 | 197 | "/dev/dasdc1": { | ||
4600 | 198 | "DEVLINKS": "/dev/disk/by-id/ccw-IBM.750000000DXP71.1500.22-part1 /dev/disk/by-id/ccw-0X1522-part1 /dev/disk/by-path/ccw-0.0.1522-part1", | ||
4601 | 199 | "DEVNAME": "/dev/dasdc1", | ||
4602 | 200 | "DEVPATH": "/devices/css0/0.0.0182/0.0.1522/block/dasdc/dasdc1", | ||
4603 | 201 | "DEVTYPE": "partition", | ||
4604 | 202 | "ID_BUS": "ccw", | ||
4605 | 203 | "ID_PATH": "ccw-0.0.1522", | ||
4606 | 204 | "ID_PATH_TAG": "ccw-0_0_1522", | ||
4607 | 205 | "ID_SCSI": "1", | ||
4608 | 206 | "ID_SERIAL": "0X1522", | ||
4609 | 207 | "ID_TYPE": "disk", | ||
4610 | 208 | "ID_UID": "IBM.750000000DXP71.1500.22", | ||
4611 | 209 | "ID_XUID": "IBM.750000000DXP71.1500.22", | ||
4612 | 210 | "MAJOR": "94", | ||
4613 | 211 | "MINOR": "9", | ||
4614 | 212 | "PARTN": "1", | ||
4615 | 213 | "SUBSYSTEM": "block", | ||
4616 | 214 | "TAGS": ":systemd:", | ||
4617 | 215 | "USEC_INITIALIZED": "1279589828313", | ||
4618 | 216 | "attrs": { | ||
4619 | 217 | "alignment_offset": "0", | ||
4620 | 218 | "dev": "94:9", | ||
4621 | 219 | "discard_alignment": "0", | ||
4622 | 220 | "inflight": " 0 0", | ||
4623 | 221 | "partition": "1", | ||
4624 | 222 | "ro": "0", | ||
4625 | 223 | "size": "17180786688", | ||
4626 | 224 | "start": "192", | ||
4627 | 225 | "stat": " 102 0 5328 140 0 0 0 0 0 210 210", | ||
4628 | 226 | "subsystem": "block", | ||
4629 | 227 | "uevent": "MAJOR=94\nMINOR=9\nDEVNAME=dasdc1\nDEVTYPE=partition\nPARTN=1" | ||
4630 | 228 | } | ||
4631 | 229 | }, | ||
4632 | 230 | "/dev/dasdc2": { | ||
4633 | 231 | "DEVLINKS": "/dev/disk/by-id/ccw-IBM.750000000DXP71.1500.22-part2 /dev/disk/by-path/ccw-0.0.1522-part2 /dev/disk/by-id/ccw-0X1522-part2", | ||
4634 | 232 | "DEVNAME": "/dev/dasdc2", | ||
4635 | 233 | "DEVPATH": "/devices/css0/0.0.0182/0.0.1522/block/dasdc/dasdc2", | ||
4636 | 234 | "DEVTYPE": "partition", | ||
4637 | 235 | "ID_BUS": "ccw", | ||
4638 | 236 | "ID_PATH": "ccw-0.0.1522", | ||
4639 | 237 | "ID_PATH_TAG": "ccw-0_0_1522", | ||
4640 | 238 | "ID_SCSI": "1", | ||
4641 | 239 | "ID_SERIAL": "0X1522", | ||
4642 | 240 | "ID_TYPE": "disk", | ||
4643 | 241 | "ID_UID": "IBM.750000000DXP71.1500.22", | ||
4644 | 242 | "ID_XUID": "IBM.750000000DXP71.1500.22", | ||
4645 | 243 | "MAJOR": "94", | ||
4646 | 244 | "MINOR": "10", | ||
4647 | 245 | "PARTN": "2", | ||
4648 | 246 | "SUBSYSTEM": "block", | ||
4649 | 247 | "TAGS": ":systemd:", | ||
4650 | 248 | "USEC_INITIALIZED": "1279589824184", | ||
4651 | 249 | "attrs": { | ||
4652 | 250 | "alignment_offset": "0", | ||
4653 | 251 | "dev": "94:10", | ||
4654 | 252 | "discard_alignment": "0", | ||
4655 | 253 | "inflight": " 0 0", | ||
4656 | 254 | "partition": "2", | ||
4657 | 255 | "ro": "0", | ||
4658 | 256 | "size": "17180786688", | ||
4659 | 257 | "start": "4194720", | ||
4660 | 258 | "stat": " 94 0 4528 120 0 0 0 0 0 200 210", | ||
4661 | 259 | "subsystem": "block", | ||
4662 | 260 | "uevent": "MAJOR=94\nMINOR=10\nDEVNAME=dasdc2\nDEVTYPE=partition\nPARTN=2" | ||
4663 | 261 | } | ||
4664 | 262 | }, | ||
4665 | 263 | "/dev/dasdc3": { | ||
4666 | 264 | "DEVLINKS": "/dev/disk/by-path/ccw-0.0.1522-part3 /dev/disk/by-id/ccw-0X1522-part3 /dev/disk/by-id/ccw-IBM.750000000DXP71.1500.22-part3", | ||
4667 | 265 | "DEVNAME": "/dev/dasdc3", | ||
4668 | 266 | "DEVPATH": "/devices/css0/0.0.0182/0.0.1522/block/dasdc/dasdc3", | ||
4669 | 267 | "DEVTYPE": "partition", | ||
4670 | 268 | "ID_BUS": "ccw", | ||
4671 | 269 | "ID_PATH": "ccw-0.0.1522", | ||
4672 | 270 | "ID_PATH_TAG": "ccw-0_0_1522", | ||
4673 | 271 | "ID_SCSI": "1", | ||
4674 | 272 | "ID_SERIAL": "0X1522", | ||
4675 | 273 | "ID_TYPE": "disk", | ||
4676 | 274 | "ID_UID": "IBM.750000000DXP71.1500.22", | ||
4677 | 275 | "ID_XUID": "IBM.750000000DXP71.1500.22", | ||
4678 | 276 | "MAJOR": "94", | ||
4679 | 277 | "MINOR": "11", | ||
4680 | 278 | "PARTN": "3", | ||
4681 | 279 | "SUBSYSTEM": "block", | ||
4682 | 280 | "TAGS": ":systemd:", | ||
4683 | 281 | "USEC_INITIALIZED": "1279589831397", | ||
4684 | 282 | "attrs": { | ||
4685 | 283 | "alignment_offset": "0", | ||
4686 | 284 | "dev": "94:11", | ||
4687 | 285 | "discard_alignment": "0", | ||
4688 | 286 | "inflight": " 0 0", | ||
4689 | 287 | "partition": "3", | ||
4690 | 288 | "ro": "0", | ||
4691 | 289 | "size": "17180786688", | ||
4692 | 290 | "start": "8389248", | ||
4693 | 291 | "stat": " 94 0 4528 90 0 0 0 0 0 140 150", | ||
4694 | 292 | "subsystem": "block", | ||
4695 | 293 | "uevent": "MAJOR=94\nMINOR=11\nDEVNAME=dasdc3\nDEVTYPE=partition\nPARTN=3" | ||
4696 | 294 | } | ||
4697 | 295 | }, | ||
4698 | 296 | "/dev/dasdd": { | ||
4699 | 297 | "DEVLINKS": "/dev/disk/by-path/ccw-0.0.1544", | ||
4700 | 298 | "DEVNAME": "/dev/dasdd", | ||
4701 | 299 | "DEVPATH": "/devices/css0/0.0.01a4/0.0.1544/block/dasdd", | ||
4702 | 300 | "DEVTYPE": "disk", | ||
4703 | 301 | "ID_PATH": "ccw-0.0.1544", | ||
4704 | 302 | "ID_PATH_TAG": "ccw-0_0_1544", | ||
4705 | 303 | "MAJOR": "94", | ||
4706 | 304 | "MINOR": "12", | ||
4707 | 305 | "MPATH_SBIN_PATH": "/sbin", | ||
4708 | 306 | "SUBSYSTEM": "block", | ||
4709 | 307 | "TAGS": ":systemd:", | ||
4710 | 308 | "USEC_INITIALIZED": "9547551", | ||
4711 | 309 | "attrs": { | ||
4712 | 310 | "alignment_offset": "0", | ||
4713 | 311 | "bdi": null, | ||
4714 | 312 | "capability": "10", | ||
4715 | 313 | "dev": "94:12", | ||
4716 | 314 | "device": null, | ||
4717 | 315 | "discard_alignment": "0", | ||
4718 | 316 | "ext_range": "4", | ||
4719 | 317 | "hidden": "0", | ||
4720 | 318 | "inflight": " 0 0", | ||
4721 | 319 | "range": "4", | ||
4722 | 320 | "removable": "0", | ||
4723 | 321 | "ro": "0", | ||
4724 | 322 | "size": "177248010240", | ||
4725 | 323 | "stat": " 17638 7942 928408 83980 256956 87209 13098840 251560 0 1876199440 1884679730", | ||
4726 | 324 | "subsystem": "block", | ||
4727 | 325 | "uevent": "MAJOR=94\nMINOR=12\nDEVNAME=dasdd\nDEVTYPE=disk" | ||
4728 | 326 | } | ||
4729 | 327 | }, | ||
4730 | 328 | "/dev/dasdd1": { | ||
4731 | 329 | "DEVLINKS": "/dev/disk/by-path/ccw-0.0.1544-part1 /dev/disk/by-uuid/0ef8a516-dcab-43d4-84d5-b3fd9d355ca8", | ||
4732 | 330 | "DEVNAME": "/dev/dasdd1", | ||
4733 | 331 | "DEVPATH": "/devices/css0/0.0.01a4/0.0.1544/block/dasdd/dasdd1", | ||
4734 | 332 | "DEVTYPE": "partition", | ||
4735 | 333 | "ID_FS_TYPE": "ext4", | ||
4736 | 334 | "ID_FS_USAGE": "filesystem", | ||
4737 | 335 | "ID_FS_UUID": "0ef8a516-dcab-43d4-84d5-b3fd9d355ca8", | ||
4738 | 336 | "ID_FS_UUID_ENC": "0ef8a516-dcab-43d4-84d5-b3fd9d355ca8", | ||
4739 | 337 | "ID_FS_VERSION": "1.0", | ||
4740 | 338 | "ID_PATH": "ccw-0.0.1544", | ||
4741 | 339 | "ID_PATH_TAG": "ccw-0_0_1544", | ||
4742 | 340 | "ID_SCSI": "1", | ||
4743 | 341 | "MAJOR": "94", | ||
4744 | 342 | "MINOR": "13", | ||
4745 | 343 | "PARTN": "1", | ||
4746 | 344 | "SUBSYSTEM": "block", | ||
4747 | 345 | "TAGS": ":systemd:", | ||
4748 | 346 | "USEC_INITIALIZED": "9576626", | ||
4749 | 347 | "attrs": { | ||
4750 | 348 | "alignment_offset": "0", | ||
4751 | 349 | "dev": "94:13", | ||
4752 | 350 | "discard_alignment": "0", | ||
4753 | 351 | "inflight": " 0 0", | ||
4754 | 352 | "partition": "1", | ||
4755 | 353 | "ro": "0", | ||
4756 | 354 | "size": "177246437376", | ||
4757 | 355 | "start": "192", | ||
4758 | 356 | "stat": " 17433 7942 926616 83910 256956 87209 13098840 251560 0 113880 479170", | ||
4759 | 357 | "subsystem": "block", | ||
4760 | 358 | "uevent": "MAJOR=94\nMINOR=13\nDEVNAME=dasdd1\nDEVTYPE=partition\nPARTN=1" | ||
4761 | 359 | } | ||
4762 | 360 | }, | ||
4763 | 361 | "/dev/dasde": { | ||
4764 | 362 | "DEVLINKS": "/dev/disk/by-path/ccw-0.0.2520", | ||
4765 | 363 | "DEVNAME": "/dev/dasde", | ||
4766 | 364 | "DEVPATH": "/devices/css0/0.0.05e0/0.0.2520/block/dasde", | ||
4767 | 365 | "DEVTYPE": "disk", | ||
4768 | 366 | "ID_PATH": "ccw-0.0.2520", | ||
4769 | 367 | "ID_PATH_TAG": "ccw-0_0_2520", | ||
4770 | 368 | "MAJOR": "94", | ||
4771 | 369 | "MINOR": "16", | ||
4772 | 370 | "MPATH_SBIN_PATH": "/sbin", | ||
4773 | 371 | "SUBSYSTEM": "block", | ||
4774 | 372 | "TAGS": ":systemd:", | ||
4775 | 373 | "USEC_INITIALIZED": "9583304", | ||
4776 | 374 | "attrs": { | ||
4777 | 375 | "alignment_offset": "0", | ||
4778 | 376 | "bdi": null, | ||
4779 | 377 | "capability": "10", | ||
4780 | 378 | "dev": "94:16", | ||
4781 | 379 | "device": null, | ||
4782 | 380 | "discard_alignment": "0", | ||
4783 | 381 | "ext_range": "4", | ||
4784 | 382 | "hidden": "0", | ||
4785 | 383 | "inflight": " 0 0", | ||
4786 | 384 | "range": "4", | ||
4787 | 385 | "removable": "0", | ||
4788 | 386 | "ro": "0", | ||
4789 | 387 | "size": "0", | ||
4790 | 388 | "stat": " 0 0 0 0 0 0 0 0 0 0 0", | ||
4791 | 389 | "subsystem": "block", | ||
4792 | 390 | "uevent": "MAJOR=94\nMINOR=16\nDEVNAME=dasde\nDEVTYPE=disk" | ||
4793 | 391 | } | ||
4794 | 392 | }, | ||
4795 | 393 | "/dev/dm-0": { | ||
4796 | 394 | "DEVLINKS": "/dev/disk/by-id/dm-name-36005076306ffd6b60000000000002409 /dev/disk/by-id/dm-uuid-mpath-36005076306ffd6b60000000000002409 /dev/disk/by-id/scsi-36005076306ffd6b60000000000002409 /dev/mapper/36005076306ffd6b60000000000002409 /dev/disk/by-id/wwn-0x6005076306ffd6b60000000000002409", | ||
4797 | 395 | "DEVNAME": "/dev/dm-0", | ||
4798 | 396 | "DEVPATH": "/devices/virtual/block/dm-0", | ||
4799 | 397 | "DEVTYPE": "disk", | ||
4800 | 398 | "DM_NAME": "36005076306ffd6b60000000000002409", | ||
4801 | 399 | "DM_STATE": "ACTIVE", | ||
4802 | 400 | "DM_SUSPENDED": "0", | ||
4803 | 401 | "DM_TABLE_STATE": "LIVE", | ||
4804 | 402 | "DM_TYPE": "scsi", | ||
4805 | 403 | "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", | ||
4806 | 404 | "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", | ||
4807 | 405 | "DM_UDEV_RULES": "1", | ||
4808 | 406 | "DM_UDEV_RULES_VSN": "2", | ||
4809 | 407 | "DM_UUID": "mpath-36005076306ffd6b60000000000002409", | ||
4810 | 408 | "DM_WWN": "0x6005076306ffd6b60000000000002409", | ||
4811 | 409 | "ID_FS_LABEL": "s1lp6:raid5-2406-2407-2408-2409", | ||
4812 | 410 | "ID_FS_LABEL_ENC": "s1lp6:raid5-2406-2407-2408-2409", | ||
4813 | 411 | "ID_FS_TYPE": "linux_raid_member", | ||
4814 | 412 | "ID_FS_USAGE": "raid", | ||
4815 | 413 | "ID_FS_UUID": "7967c3f6-b6bb-2523-f515-9792ff8ac0f3", | ||
4816 | 414 | "ID_FS_UUID_ENC": "7967c3f6-b6bb-2523-f515-9792ff8ac0f3", | ||
4817 | 415 | "ID_FS_UUID_SUB": "a18d1237-26f5-d9b4-73dc-6530195cd76a", | ||
4818 | 416 | "ID_FS_UUID_SUB_ENC": "a18d1237-26f5-d9b4-73dc-6530195cd76a", | ||
4819 | 417 | "ID_FS_VERSION": "1.2", | ||
4820 | 418 | "MAJOR": "253", | ||
4821 | 419 | "MINOR": "0", | ||
4822 | 420 | "MPATH_DEVICE_READY": "1", | ||
4823 | 421 | "MPATH_SBIN_PATH": "/sbin", | ||
4824 | 422 | "SUBSYSTEM": "block", | ||
4825 | 423 | "TAGS": ":systemd:", | ||
4826 | 424 | "USEC_INITIALIZED": "52574971799", | ||
4827 | 425 | "attrs": { | ||
4828 | 426 | "alignment_offset": "0", | ||
4829 | 427 | "bdi": null, | ||
4830 | 428 | "capability": "10", | ||
4831 | 429 | "dev": "253:0", | ||
4832 | 430 | "discard_alignment": "0", | ||
4833 | 431 | "ext_range": "1", | ||
4834 | 432 | "hidden": "0", | ||
4835 | 433 | "inflight": " 0 0", | ||
4836 | 434 | "range": "1", | ||
4837 | 435 | "removable": "0", | ||
4838 | 436 | "ro": "0", | ||
4839 | 437 | "size": "10737418240", | ||
4840 | 438 | "stat": " 1367 0 9532 310 1 0 1 0 0 680 680", | ||
4841 | 439 | "subsystem": "block", | ||
4842 | 440 | "uevent": "MAJOR=253\nMINOR=0\nDEVNAME=dm-0\nDEVTYPE=disk" | ||
4843 | 441 | } | ||
4844 | 442 | }, | ||
4845 | 443 | "/dev/dm-1": { | ||
4846 | 444 | "DEVLINKS": "/dev/disk/by-id/dm-uuid-mpath-36005076306ffd6b60000000000002408 /dev/mapper/36005076306ffd6b60000000000002408 /dev/disk/by-id/wwn-0x6005076306ffd6b60000000000002408 /dev/disk/by-id/dm-name-36005076306ffd6b60000000000002408 /dev/disk/by-id/scsi-36005076306ffd6b60000000000002408", | ||
4847 | 445 | "DEVNAME": "/dev/dm-1", | ||
4848 | 446 | "DEVPATH": "/devices/virtual/block/dm-1", | ||
4849 | 447 | "DEVTYPE": "disk", | ||
4850 | 448 | "DM_NAME": "36005076306ffd6b60000000000002408", | ||
4851 | 449 | "DM_STATE": "ACTIVE", | ||
4852 | 450 | "DM_SUSPENDED": "0", | ||
4853 | 451 | "DM_TABLE_STATE": "LIVE", | ||
4854 | 452 | "DM_TYPE": "scsi", | ||
4855 | 453 | "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", | ||
4856 | 454 | "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", | ||
4857 | 455 | "DM_UDEV_RULES": "1", | ||
4858 | 456 | "DM_UDEV_RULES_VSN": "2", | ||
4859 | 457 | "DM_UUID": "mpath-36005076306ffd6b60000000000002408", | ||
4860 | 458 | "DM_WWN": "0x6005076306ffd6b60000000000002408", | ||
4861 | 459 | "ID_FS_LABEL": "s1lp6:raid5-2406-2407-2408-2409", | ||
4862 | 460 | "ID_FS_LABEL_ENC": "s1lp6:raid5-2406-2407-2408-2409", | ||
4863 | 461 | "ID_FS_TYPE": "linux_raid_member", | ||
4864 | 462 | "ID_FS_USAGE": "raid", | ||
4865 | 463 | "ID_FS_UUID": "7967c3f6-b6bb-2523-f515-9792ff8ac0f3", | ||
4866 | 464 | "ID_FS_UUID_ENC": "7967c3f6-b6bb-2523-f515-9792ff8ac0f3", | ||
4867 | 465 | "ID_FS_UUID_SUB": "e96ca63b-c454-c133-2bcf-db53103a44f7", | ||
4868 | 466 | "ID_FS_UUID_SUB_ENC": "e96ca63b-c454-c133-2bcf-db53103a44f7", | ||
4869 | 467 | "ID_FS_VERSION": "1.2", | ||
4870 | 468 | "MAJOR": "253", | ||
4871 | 469 | "MINOR": "1", | ||
4872 | 470 | "MPATH_DEVICE_READY": "1", | ||
4873 | 471 | "MPATH_SBIN_PATH": "/sbin", | ||
4874 | 472 | "SUBSYSTEM": "block", | ||
4875 | 473 | "TAGS": ":systemd:", | ||
4876 | 474 | "USEC_INITIALIZED": "52578275554", | ||
4877 | 475 | "attrs": { | ||
4878 | 476 | "alignment_offset": "0", | ||
4879 | 477 | "bdi": null, | ||
4880 | 478 | "capability": "10", | ||
4881 | 479 | "dev": "253:1", | ||
4882 | 480 | "discard_alignment": "0", | ||
4883 | 481 | "ext_range": "1", | ||
4884 | 482 | "hidden": "0", | ||
4885 | 483 | "inflight": " 0 0", | ||
4886 | 484 | "range": "1", | ||
4887 | 485 | "removable": "0", | ||
4888 | 486 | "ro": "0", | ||
4889 | 487 | "size": "10737418240", | ||
4890 | 488 | "stat": " 2442 213 25630 1230 1 0 1 0 0 1320 2110", | ||
4891 | 489 | "subsystem": "block", | ||
4892 | 490 | "uevent": "MAJOR=253\nMINOR=1\nDEVNAME=dm-1\nDEVTYPE=disk" | ||
4893 | 491 | } | ||
4894 | 492 | }, | ||
4895 | 493 | "/dev/dm-10": { | ||
4896 | 494 | "DEVLINKS": "/dev/disk/by-uuid/6b920893-062d-4b24-bafd-7237e7eea19d /dev/mapper/storage_vg_242x-lv_tmp /dev/storage_vg_242x/lv_tmp /dev/disk/by-id/dm-name-storage_vg_242x-lv_tmp /dev/disk/by-id/dm-uuid-LVM-vK8pAtBwlyrZxQgOcgVSlj81LvyUnvq4OF1H7mF23XJIHlznOzyw9TFKGuD2g0ta", | ||
4897 | 495 | "DEVNAME": "/dev/dm-10", | ||
4898 | 496 | "DEVPATH": "/devices/virtual/block/dm-10", | ||
4899 | 497 | "DEVTYPE": "disk", | ||
4900 | 498 | "DM_ACTIVATION": "1", | ||
4901 | 499 | "DM_LV_NAME": "lv_tmp", | ||
4902 | 500 | "DM_NAME": "storage_vg_242x-lv_tmp", | ||
4903 | 501 | "DM_STATE": "ACTIVE", | ||
4904 | 502 | "DM_SUSPENDED": "0", | ||
4905 | 503 | "DM_TABLE_STATE": "LIVE", | ||
4906 | 504 | "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", | ||
4907 | 505 | "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", | ||
4908 | 506 | "DM_UDEV_RULES": "1", | ||
4909 | 507 | "DM_UDEV_RULES_VSN": "2", | ||
4910 | 508 | "DM_UUID": "LVM-vK8pAtBwlyrZxQgOcgVSlj81LvyUnvq4OF1H7mF23XJIHlznOzyw9TFKGuD2g0ta", | ||
4911 | 509 | "DM_VG_NAME": "storage_vg_242x", | ||
4912 | 510 | "ID_FS_TYPE": "ext4", | ||
4913 | 511 | "ID_FS_USAGE": "filesystem", | ||
4914 | 512 | "ID_FS_UUID": "6b920893-062d-4b24-bafd-7237e7eea19d", | ||
4915 | 513 | "ID_FS_UUID_ENC": "6b920893-062d-4b24-bafd-7237e7eea19d", | ||
4916 | 514 | "ID_FS_VERSION": "1.0", | ||
4917 | 515 | "MAJOR": "253", | ||
4918 | 516 | "MINOR": "10", | ||
4919 | 517 | "SUBSYSTEM": "block", | ||
4920 | 518 | "TAGS": ":systemd:", | ||
4921 | 519 | "USEC_INITIALIZED": "52580163360", | ||
4922 | 520 | "attrs": { | ||
4923 | 521 | "alignment_offset": "0", | ||
4924 | 522 | "bdi": null, | ||
4925 | 523 | "capability": "10", | ||
4926 | 524 | "dev": "253:10", | ||
4927 | 525 | "discard_alignment": "0", | ||
4928 | 526 | "ext_range": "1", | ||
4929 | 527 | "hidden": "0", | ||
4930 | 528 | "inflight": " 0 0", | ||
4931 | 529 | "range": "1", | ||
4932 | 530 | "removable": "0", | ||
4933 | 531 | "ro": "0", | ||
4934 | 532 | "size": "103066632192", | ||
4935 | 533 | "stat": " 1918 0 63050 980 46606 0 381088 330 0 3947610 3948030", | ||
4936 | 534 | "subsystem": "block", | ||
4937 | 535 | "uevent": "MAJOR=253\nMINOR=10\nDEVNAME=dm-10\nDEVTYPE=disk" | ||
4938 | 536 | } | ||
4939 | 537 | }, | ||
4940 | 538 | "/dev/dm-2": { | ||
4941 | 539 | "DEVLINKS": "/dev/disk/by-id/wwn-0x6005076306ffd6b60000000000002406 /dev/disk/by-id/dm-uuid-mpath-36005076306ffd6b60000000000002406 /dev/disk/by-id/dm-name-36005076306ffd6b60000000000002406 /dev/disk/by-id/scsi-36005076306ffd6b60000000000002406 /dev/disk/by-uuid/308b3159-5497-48e7-84d7-cac358c4e228 /dev/mapper/36005076306ffd6b60000000000002406", | ||
4942 | 540 | "DEVNAME": "/dev/dm-2", | ||
4943 | 541 | "DEVPATH": "/devices/virtual/block/dm-2", | ||
4944 | 542 | "DEVTYPE": "disk", | ||
4945 | 543 | "DM_NAME": "36005076306ffd6b60000000000002406", | ||
4946 | 544 | "DM_STATE": "ACTIVE", | ||
4947 | 545 | "DM_SUSPENDED": "0", | ||
4948 | 546 | "DM_TABLE_STATE": "LIVE", | ||
4949 | 547 | "DM_TYPE": "scsi", | ||
4950 | 548 | "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", | ||
4951 | 549 | "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", | ||
4952 | 550 | "DM_UDEV_RULES": "1", | ||
4953 | 551 | "DM_UDEV_RULES_VSN": "2", | ||
4954 | 552 | "DM_UUID": "mpath-36005076306ffd6b60000000000002406", | ||
4955 | 553 | "DM_WWN": "0x6005076306ffd6b60000000000002406", | ||
4956 | 554 | "ID_FS_TYPE": "bcache", | ||
4957 | 555 | "ID_FS_UUID": "308b3159-5497-48e7-84d7-cac358c4e228", | ||
4958 | 556 | "ID_FS_UUID_ENC": "308b3159-5497-48e7-84d7-cac358c4e228", | ||
4959 | 557 | "MAJOR": "253", | ||
4960 | 558 | "MINOR": "2", | ||
4961 | 559 | "MPATH_DEVICE_READY": "1", | ||
4962 | 560 | "MPATH_SBIN_PATH": "/sbin", | ||
4963 | 561 | "SUBSYSTEM": "block", | ||
4964 | 562 | "TAGS": ":systemd:", | ||
4965 | 563 | "USEC_INITIALIZED": "52578383687", | ||
4966 | 564 | "attrs": { | ||
4967 | 565 | "alignment_offset": "0", | ||
4968 | 566 | "bdi": null, | ||
4969 | 567 | "capability": "10", | ||
4970 | 568 | "dev": "253:2", | ||
4971 | 569 | "discard_alignment": "0", | ||
4972 | 570 | "ext_range": "1", | ||
4973 | 571 | "hidden": "0", | ||
4974 | 572 | "inflight": " 0 0", | ||
4975 | 573 | "range": "1", | ||
4976 | 574 | "removable": "0", | ||
4977 | 575 | "ro": "0", | ||
4978 | 576 | "size": "10737418240", | ||
4979 | 577 | "stat": " 1747 0 28036 270 5 1 25 0 0 650 650", | ||
4980 | 578 | "subsystem": "block", | ||
4981 | 579 | "uevent": "MAJOR=253\nMINOR=2\nDEVNAME=dm-2\nDEVTYPE=disk" | ||
4982 | 580 | } | ||
4983 | 581 | }, | ||
4984 | 582 | "/dev/dm-3": { | ||
4985 | 583 | "DEVLINKS": "/dev/disk/by-id/lvm-pv-uuid-c9yFym-fhMk-BHHc-nXDt-uxYY-xmQV-oWg69m /dev/mapper/36005076306ffd6b60000000000002422 /dev/disk/by-id/dm-uuid-mpath-36005076306ffd6b60000000000002422 /dev/disk/by-id/scsi-36005076306ffd6b60000000000002422 /dev/disk/by-id/dm-name-36005076306ffd6b60000000000002422 /dev/disk/by-id/wwn-0x6005076306ffd6b60000000000002422", | ||
4986 | 584 | "DEVNAME": "/dev/dm-3", | ||
4987 | 585 | "DEVPATH": "/devices/virtual/block/dm-3", | ||
4988 | 586 | "DEVTYPE": "disk", | ||
4989 | 587 | "DM_ACTIVATION": "0", | ||
4990 | 588 | "DM_NAME": "36005076306ffd6b60000000000002422", | ||
4991 | 589 | "DM_STATE": "ACTIVE", | ||
4992 | 590 | "DM_SUBSYSTEM_UDEV_FLAG0": "1", | ||
4993 | 591 | "DM_SUSPENDED": "0", | ||
4994 | 592 | "DM_TABLE_STATE": "LIVE", | ||
4995 | 593 | "DM_TYPE": "scsi", | ||
4996 | 594 | "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", | ||
4997 | 595 | "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", | ||
4998 | 596 | "DM_UDEV_RULES": "1", | ||
4999 | 597 | "DM_UDEV_RULES_VSN": "2", | ||
5000 | 598 | "DM_UUID": "mpath-36005076306ffd6b60000000000002422", |
After manually adding the SRU bug number, the ~19.10.1 version suffix and removing all other bug references, I see the same locally. Thanks!