diff --git a/examples/funkmetal.json b/examples/funkmetal.json new file mode 100644 index 00000000..6889ef21 --- /dev/null +++ b/examples/funkmetal.json @@ -0,0 +1,1773 @@ +{ + "network": { + "eth0": { + "bond": { + "is_master": false, + "is_slave": false, + "mode": null, + "slaves": null + }, + "bridge": { + "interfaces": [], + "is_bridge": false, + "is_port": false, + "options": {} + }, + "hardware": { + "DEVPATH": "/devices/pci0000:00/0000:00:15.1/0000:05:00.0/net/eth0", + "ID_BUS": "pci", + "ID_MODEL_FROM_DATABASE": "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Motherboard)", + "ID_MODEL_ID": "0x8168", + "ID_NET_DRIVER": "r8169", + "ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link", + "ID_NET_NAME": "enp5s0", + "ID_NET_NAME_MAC": "enx74d435c7cde4", + "ID_NET_NAME_PATH": "enp5s0", + "ID_OUI_FROM_DATABASE": "GIGA-BYTE TECHNOLOGY CO.,LTD.", + "ID_PATH": "pci-0000:05:00.0", + "ID_PATH_TAG": "pci-0000_05_00_0", + "ID_PCI_CLASS_FROM_DATABASE": "Network controller", + "ID_PCI_SUBCLASS_FROM_DATABASE": "Ethernet controller", + "ID_VENDOR_FROM_DATABASE": "Realtek Semiconductor Co., Ltd.", + "ID_VENDOR_ID": "0x10ec", + "IFINDEX": "2", + "INTERFACE": "eth0", + "SUBSYSTEM": "net", + "SYSTEMD_ALIAS": "/sys/subsystem/net/devices/eth0", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "4231947", + "attrs": { + "addr_assign_type": "0", + "addr_len": "6", + "address": "74:d4:35:c7:cd:e4", + "broadcast": "ff:ff:ff:ff:ff:ff", + "carrier": "1", + "carrier_changes": "2", + "dev_id": "0x0", + "dev_port": "0", + "device": null, + "dormant": "0", + "duplex": "full", + "flags": "0x1003", + "gro_flush_timeout": "0", + "ifalias": "", + "ifindex": "2", + "iflink": "2", + "link_mode": "0", + "mtu": "1500", + "name_assign_type": null, + "netdev_group": "0", + "operstate": "up", + "phys_port_id": null, + "phys_port_name": null, + "phys_switch_id": null, + "speed": "1000", + "subsystem": "net", + "tx_queue_len": "1000", + "type": "1", + "uevent": "INTERFACE=eth0\nIFINDEX=2" + } + }, + "ip": { + "addr": "192.168.11.55", + "broadcast": "192.168.11.255", + "netmask": "255.255.255.0", + "source": { + "config": { + "active": true, + "lease": { + "expire": "6 2015/09/12 19:52:39", + "fixed-address": "192.168.11.55", + "interface": "eth0", + "options": { + "broadcast-address": "192.168.11.255", + "dhcp-lease-time": "216000", + "dhcp-message-type": "5", + "dhcp-rebinding-time": "186327", + "dhcp-renewal-time": "105327", + "dhcp-server-identifier": "192.168.11.1", + "domain-name": "home.woxford.com", + "domain-name-servers": "192.168.11.1", + "host-name": "funkmetal", + "routers": "192.168.11.1", + "subnet-mask": "255.255.255.0" + }, + "rebind": "6 2015/09/12 19:52:39", + "renew": "6 2015/09/12 19:52:39" + } + }, + "method": "dhcp", + "provider": "192.168.11.1" + } + }, + "type": "eth" + }, + "lo": { + "bond": { + "is_master": false, + "is_slave": false, + "mode": null, + "slaves": null + }, + "bridge": { + "interfaces": [], + "is_bridge": false, + "is_port": false, + "options": {} + }, + "hardware": { + "DEVPATH": "/devices/virtual/net/lo", + "ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link", + "IFINDEX": "1", + "INTERFACE": "lo", + "SUBSYSTEM": "net", + "USEC_INITIALIZED": "4214443", + "attrs": { + "addr_assign_type": "0", + "addr_len": "6", + "address": "00:00:00:00:00:00", + "broadcast": "00:00:00:00:00:00", + "carrier": "1", + "carrier_changes": "0", + "dev_id": "0x0", + "dev_port": "0", + "dormant": "0", + "duplex": null, + "flags": "0x9", + "gro_flush_timeout": "0", + "ifalias": "", + "ifindex": "1", + "iflink": "1", + "link_mode": "0", + "mtu": "65536", + "name_assign_type": null, + "netdev_group": "0", + "operstate": "unknown", + "phys_port_id": null, + "phys_port_name": null, + "phys_switch_id": null, + "speed": null, + "subsystem": "net", + "tx_queue_len": "0", + "type": "772", + "uevent": "INTERFACE=lo\nIFINDEX=1" + } + }, + "ip": { + "addr": "127.0.0.1", + "netmask": "255.0.0.0", + "peer": "127.0.0.1", + "source": { + "config": { + "auto": true, + "family": "inet", + "method": "loopback" + }, + "method": "loopback", + "provider": "local config" + } + }, + "type": "lo" + }, + "lxcbr0": { + "bond": { + "is_master": false, + "is_slave": false, + "mode": null, + "slaves": null + }, + "bridge": { + "interfaces": [], + "is_bridge": true, + "is_port": false, + "options": { + "ageing_time": "30000", + "bridge_id": "8000.000000000000", + "default_pvid": "1", + "forward_delay": "1500", + "gc_timer": "2896", + "group_addr": "1:80:c2:0:0:0", + "group_fwd_mask": "0x0", + "hash_elasticity": "4", + "hash_max": "512", + "hello_time": "200", + "hello_timer": "0", + "max_age": "2000", + "multicast_last_member_count": "2", + "multicast_last_member_interval": "100", + "multicast_membership_interval": "26000", + "multicast_querier": "0", + "multicast_querier_interval": "25500", + "multicast_query_interval": "12500", + "multicast_query_response_interval": "1000", + "multicast_query_use_ifaddr": "0", + "multicast_router": "1", + "multicast_snooping": "1", + "multicast_startup_query_count": "2", + "multicast_startup_query_interval": "3124", + "nf_call_arptables": "0", + "nf_call_ip6tables": "0", + "nf_call_iptables": "0", + "priority": "32768", + "root_id": "8000.000000000000", + "root_path_cost": "0", + "root_port": "0", + "stp_state": "0", + "tcn_timer": "0", + "topology_change": "0", + "topology_change_detected": "0", + "topology_change_timer": "0", + "vlan_filtering": "0", + "vlan_protocol": "0x8100" + } + }, + "hardware": { + "DEVPATH": "/devices/virtual/net/lxcbr0", + "DEVTYPE": "bridge", + "ID_NET_DRIVER": "bridge", + "ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link", + "IFINDEX": "4", + "INTERFACE": "lxcbr0", + "SUBSYSTEM": "net", + "SYSTEMD_ALIAS": "/sys/subsystem/net/devices/lxcbr0", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "9857315", + "attrs": { + "addr_assign_type": "1", + "addr_len": "6", + "address": "42:43:00:83:7a:bf", + "brforward": "", + "broadcast": "ff:ff:ff:ff:ff:ff", + "carrier": "1", + "carrier_changes": "0", + "dev_id": "0x0", + "dev_port": "0", + "dormant": "0", + "duplex": null, + "flags": "0x1003", + "gro_flush_timeout": "0", + "ifalias": "", + "ifindex": "4", + "iflink": "4", + "link_mode": "0", + "mtu": "1500", + "name_assign_type": "3", + "netdev_group": "0", + "operstate": "unknown", + "phys_port_id": null, + "phys_port_name": null, + "phys_switch_id": null, + "speed": null, + "subsystem": "net", + "tx_queue_len": "0", + "type": "1", + "uevent": "DEVTYPE=bridge\nINTERFACE=lxcbr0\nIFINDEX=4" + } + }, + "ip": { + "addr": "10.0.3.1", + "broadcast": "10.0.3.1", + "netmask": "255.255.255.0", + "source": { + "config": null, + "method": "manual", + "provider": null + } + }, + "type": "bridge" + }, + "virbr0": { + "bond": { + "is_master": false, + "is_slave": false, + "mode": null, + "slaves": null + }, + "bridge": { + "interfaces": [ + "virbr0-nic" + ], + "is_bridge": true, + "is_port": false, + "options": { + "ageing_time": "30000", + "bridge_id": "8000.5254006b40ee", + "default_pvid": "1", + "forward_delay": "200", + "gc_timer": "2894", + "group_addr": "1:80:c2:0:0:0", + "group_fwd_mask": "0x0", + "hash_elasticity": "4", + "hash_max": "512", + "hello_time": "200", + "hello_timer": "82", + "max_age": "2000", + "multicast_last_member_count": "2", + "multicast_last_member_interval": "100", + "multicast_membership_interval": "26000", + "multicast_querier": "0", + "multicast_querier_interval": "25500", + "multicast_query_interval": "12500", + "multicast_query_response_interval": "1000", + "multicast_query_use_ifaddr": "0", + "multicast_router": "1", + "multicast_snooping": "1", + "multicast_startup_query_count": "2", + "multicast_startup_query_interval": "3124", + "nf_call_arptables": "0", + "nf_call_ip6tables": "0", + "nf_call_iptables": "0", + "priority": "32768", + "root_id": "8000.5254006b40ee", + "root_path_cost": "0", + "root_port": "0", + "stp_state": "1", + "tcn_timer": "0", + "topology_change": "0", + "topology_change_detected": "0", + "topology_change_timer": "0", + "vlan_filtering": "0", + "vlan_protocol": "0x8100" + } + }, + "hardware": { + "DEVPATH": "/devices/virtual/net/virbr0", + "DEVTYPE": "bridge", + "ID_NET_DRIVER": "bridge", + "ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link", + "IFINDEX": "5", + "INTERFACE": "virbr0", + "SUBSYSTEM": "net", + "SYSTEMD_ALIAS": "/sys/subsystem/net/devices/virbr0", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "10453465", + "attrs": { + "addr_assign_type": "1", + "addr_len": "6", + "address": "52:54:00:6b:40:ee", + "brforward": "RT", + "broadcast": "ff:ff:ff:ff:ff:ff", + "carrier": "0", + "carrier_changes": "1", + "dev_id": "0x0", + "dev_port": "0", + "dormant": "0", + "duplex": null, + "flags": "0x1003", + "gro_flush_timeout": "0", + "ifalias": "", + "ifindex": "5", + "iflink": "5", + "link_mode": "0", + "lower_virbr0-nic": null, + "mtu": "1500", + "name_assign_type": "3", + "netdev_group": "0", + "operstate": "down", + "phys_port_id": null, + "phys_port_name": null, + "phys_switch_id": null, + "speed": null, + "subsystem": "net", + "tx_queue_len": "0", + "type": "1", + "uevent": "DEVTYPE=bridge\nINTERFACE=virbr0\nIFINDEX=5" + } + }, + "ip": { + "addr": "192.168.122.1", + "broadcast": "192.168.122.255", + "netmask": "255.255.255.0", + "source": { + "config": null, + "method": "manual", + "provider": null + } + }, + "type": "bridge" + }, + "virbr0-nic": { + "bond": { + "is_master": false, + "is_slave": false, + "mode": null, + "slaves": null + }, + "bridge": { + "interfaces": [], + "is_bridge": false, + "is_port": true, + "options": { + "bpdu_guard": "0", + "change_ack": "0", + "config_pending": "0", + "designated_bridge": "8000.5254006b40ee", + "designated_cost": "0", + "designated_port": "32769", + "designated_root": "8000.5254006b40ee", + "forward_delay_timer": "0", + "hairpin_mode": "0", + "hold_timer": "0", + "learning": "1", + "message_age_timer": "0", + "multicast_fast_leave": "0", + "multicast_router": "1", + "path_cost": "100", + "port_id": "0x8001", + "port_no": "0x1", + "priority": "32", + "proxyarp": "0", + "proxyarp_wifi": "0", + "root_block": "0", + "state": "0", + "unicast_flood": "1" + } + }, + "hardware": { + "DEVPATH": "/devices/virtual/net/virbr0-nic", + "ID_NET_DRIVER": "tun", + "ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link", + "IFINDEX": "6", + "INTERFACE": "virbr0-nic", + "SUBSYSTEM": "net", + "SYSTEMD_ALIAS": "/sys/subsystem/net/devices/virbr0-nic", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "10454090", + "attrs": { + "addr_assign_type": "3", + "addr_len": "6", + "address": "52:54:00:6b:40:ee", + "broadcast": "ff:ff:ff:ff:ff:ff", + "carrier": null, + "carrier_changes": "1", + "dev_id": "0x0", + "dev_port": "0", + "dormant": null, + "duplex": null, + "flags": "0x1302", + "gro_flush_timeout": "0", + "group": "-1", + "ifalias": "", + "ifindex": "6", + "iflink": "6", + "link_mode": "0", + "master": null, + "mtu": "1500", + "name_assign_type": null, + "netdev_group": "0", + "operstate": "down", + "owner": "-1", + "phys_port_id": null, + "phys_port_name": null, + "phys_switch_id": null, + "speed": null, + "subsystem": "net", + "tun_flags": "0x1802", + "tx_queue_len": "500", + "type": "1", + "uevent": "INTERFACE=virbr0-nic\nIFINDEX=6", + "upper_virbr0": null + } + }, + "ip": { + "addr": null, + "broadcast": null, + "netmask": null, + "source": {} + }, + "type": "tap" + }, + "wlan0": { + "bond": { + "is_master": false, + "is_slave": false, + "mode": null, + "slaves": null + }, + "bridge": { + "interfaces": [], + "is_bridge": false, + "is_port": false, + "options": {} + }, + "hardware": { + "DEVPATH": "/devices/pci0000:00/0000:00:15.2/0000:06:00.0/net/wlan0", + "DEVTYPE": "wlan", + "ID_BUS": "pci", + "ID_MODEL_FROM_DATABASE": "RTL8723AE PCIe Wireless Network Adapter", + "ID_MODEL_ID": "0x8723", + "ID_NET_DRIVER": "rtl8723ae", + "ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link", + "ID_NET_NAME": "wlp6s0", + "ID_NET_NAME_MAC": "wlx54271e128d74", + "ID_NET_NAME_PATH": "wlp6s0", + "ID_OUI_FROM_DATABASE": "AzureWave Technonloies, Inc.", + "ID_PATH": "pci-0000:06:00.0", + "ID_PATH_TAG": "pci-0000_06_00_0", + "ID_PCI_CLASS_FROM_DATABASE": "Network controller", + "ID_PCI_SUBCLASS_FROM_DATABASE": "Network controller", + "ID_VENDOR_FROM_DATABASE": "Realtek Semiconductor Co., Ltd.", + "ID_VENDOR_ID": "0x10ec", + "IFINDEX": "3", + "INTERFACE": "wlan0", + "SUBSYSTEM": "net", + "SYSTEMD_ALIAS": "/sys/subsystem/net/devices/wlan0", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "8701101", + "attrs": { + "addr_assign_type": "0", + "addr_len": "6", + "address": "54:27:1e:12:8d:74", + "broadcast": "ff:ff:ff:ff:ff:ff", + "carrier": null, + "carrier_changes": "0", + "dev_id": "0x0", + "dev_port": "0", + "device": null, + "dormant": null, + "duplex": null, + "flags": "0x1002", + "gro_flush_timeout": "0", + "ifalias": "", + "ifindex": "3", + "iflink": "3", + "link_mode": "0", + "mtu": "1500", + "name_assign_type": "1", + "netdev_group": "0", + "operstate": "down", + "phy80211": null, + "phys_port_id": null, + "phys_port_name": null, + "phys_switch_id": null, + "speed": null, + "subsystem": "net", + "tx_queue_len": "1000", + "type": "1", + "uevent": "DEVTYPE=wlan\nINTERFACE=wlan0\nIFINDEX=3" + } + }, + "ip": { + "addr": null, + "broadcast": null, + "netmask": null, + "source": {} + }, + "type": "wlan" + } + }, + "storage": { + "/dev/dm-0": { + "DEVLINKS": "/dev/disk/by-id/dm-name-funkmetal--vg-root /dev/disk/by-uuid/de8a5b24-5d2e-4394-a8c8-14938f9e3e96 /dev/disk/by-id/dm-uuid-LVM-3UD7rUfG1U4EAVKJkyjoNup3wQBT5hkuTh1g2U27IAy1WQtCQJ2vE7hbcM57kADs /dev/funkmetal-vg/root /dev/mapper/funkmetal--vg-root", + "DEVNAME": "/dev/dm-0", + "DEVPATH": "/devices/virtual/block/dm-0", + "DEVTYPE": "disk", + "DM_ACTIVATION": "1", + "DM_LV_NAME": "root", + "DM_NAME": "funkmetal--vg-root", + "DM_STATE": "ACTIVE", + "DM_SUSPENDED": "0", + "DM_TABLE_STATE": "LIVE", + "DM_TYPE": "raid", + "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", + "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", + "DM_UDEV_RULES": "1", + "DM_UUID": "LVM-3UD7rUfG1U4EAVKJkyjoNup3wQBT5hkuTh1g2U27IAy1WQtCQJ2vE7hbcM57kADs", + "DM_VG_NAME": "funkmetal-vg", + "ID_FS_TYPE": "ext4", + "ID_FS_USAGE": "filesystem", + "ID_FS_UUID": "de8a5b24-5d2e-4394-a8c8-14938f9e3e96", + "ID_FS_UUID_ENC": "de8a5b24-5d2e-4394-a8c8-14938f9e3e96", + "ID_FS_VERSION": "1.0", + "MAJOR": "252", + "MINOR": "0", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "4940595", + "attrs": { + "alignment_offset": "0", + "bdi": null, + "capability": "10", + "dev": "252:0", + "discard_alignment": "0", + "ext_range": "1", + "inflight": " 0 0", + "range": "1", + "removable": "0", + "ro": "0", + "size": "103456702464", + "stat": " 86728 0 2333762 26928 154823 0 121318760 4037516 0 164976 4064572", + "subsystem": "block", + "uevent": "MAJOR=252\nMINOR=0\nDEVNAME=dm-0\nDEVTYPE=disk" + } + }, + "/dev/dm-1": { + "DEVLINKS": "/dev/disk/by-id/dm-name-funkmetal--vg-swap_1 /dev/disk/by-uuid/66b1408a-434a-4d98-9dff-41aefc50130c /dev/mapper/funkmetal--vg-swap_1 /dev/disk/by-id/dm-uuid-LVM-3UD7rUfG1U4EAVKJkyjoNup3wQBT5hkuNWd8ozta3QP4qiZTEbcsTecp9Q2u30qJ /dev/funkmetal-vg/swap_1", + "DEVNAME": "/dev/dm-1", + "DEVPATH": "/devices/virtual/block/dm-1", + "DEVTYPE": "disk", + "DM_ACTIVATION": "1", + "DM_LV_NAME": "swap_1", + "DM_NAME": "funkmetal--vg-swap_1", + "DM_STATE": "ACTIVE", + "DM_SUSPENDED": "0", + "DM_TABLE_STATE": "LIVE", + "DM_TYPE": "raid", + "DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG": "1", + "DM_UDEV_PRIMARY_SOURCE_FLAG": "1", + "DM_UDEV_RULES": "1", + "DM_UUID": "LVM-3UD7rUfG1U4EAVKJkyjoNup3wQBT5hkuNWd8ozta3QP4qiZTEbcsTecp9Q2u30qJ", + "DM_VG_NAME": "funkmetal-vg", + "ID_FS_TYPE": "swap", + "ID_FS_USAGE": "other", + "ID_FS_UUID": "66b1408a-434a-4d98-9dff-41aefc50130c", + "ID_FS_UUID_ENC": "66b1408a-434a-4d98-9dff-41aefc50130c", + "ID_FS_VERSION": "1", + "MAJOR": "252", + "MINOR": "1", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "4942475", + "attrs": { + "alignment_offset": "0", + "bdi": null, + "capability": "10", + "dev": "252:1", + "discard_alignment": "0", + "ext_range": "1", + "inflight": " 0 0", + "range": "1", + "removable": "0", + "ro": "0", + "size": "16315842560", + "stat": " 231 0 5632 16 0 0 0 0 0 16 16", + "subsystem": "block", + "uevent": "MAJOR=252\nMINOR=1\nDEVNAME=dm-1\nDEVTYPE=disk" + } + }, + "/dev/sda": { + "DEVLINKS": "/dev/disk/by-id/wwn-0x500a07510d1e6322 /dev/disk/by-id/ata-Crucial_CT120M500SSD3_14350D1E6322", + "DEVNAME": "/dev/sda", + "DEVPATH": "/devices/pci0000:00/0000:00:11.0/ata1/host1/target1:0:0/1:0:0:0/block/sda", + "DEVTYPE": "disk", + "ID_ATA": "1", + "ID_ATA_DOWNLOAD_MICROCODE": "1", + "ID_ATA_FEATURE_SET_APM": "1", + "ID_ATA_FEATURE_SET_APM_CURRENT_VALUE": "254", + "ID_ATA_FEATURE_SET_APM_ENABLED": "1", + "ID_ATA_FEATURE_SET_HPA": "1", + "ID_ATA_FEATURE_SET_HPA_ENABLED": "1", + "ID_ATA_FEATURE_SET_PM": "1", + "ID_ATA_FEATURE_SET_PM_ENABLED": "1", + "ID_ATA_FEATURE_SET_SECURITY": "1", + "ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0", + "ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "2", + "ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "2", + "ID_ATA_FEATURE_SET_SECURITY_FROZEN": "1", + "ID_ATA_FEATURE_SET_SMART": "1", + "ID_ATA_FEATURE_SET_SMART_ENABLED": "1", + "ID_ATA_ROTATION_RATE_RPM": "0", + "ID_ATA_SATA": "1", + "ID_ATA_SATA_SIGNAL_RATE_GEN1": "1", + "ID_ATA_SATA_SIGNAL_RATE_GEN2": "1", + "ID_ATA_WRITE_CACHE": "1", + "ID_ATA_WRITE_CACHE_ENABLED": "1", + "ID_BUS": "ata", + "ID_MODEL": "Crucial_CT120M500SSD3", + "ID_MODEL_ENC": "Crucial_CT120M500SSD3\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_PART_TABLE_TYPE": "dos", + "ID_PART_TABLE_UUID": "000701fc", + "ID_REVISION": "MU05", + "ID_SERIAL": "Crucial_CT120M500SSD3_14350D1E6322", + "ID_SERIAL_SHORT": "14350D1E6322", + "ID_TYPE": "disk", + "ID_WWN": "0x500a07510d1e6322", + "ID_WWN_WITH_EXTENSION": "0x500a07510d1e6322", + "MAJOR": "8", + "MINOR": "0", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "4741347", + "attrs": { + "alignment_offset": "0", + "bdi": null, + "capability": "50", + "dev": "8:0", + "device": null, + "discard_alignment": "0", + "events": "", + "events_async": "", + "events_poll_msecs": "-1", + "ext_range": "256", + "inflight": " 0 0", + "range": "16", + "removable": "0", + "ro": "0", + "size": "120034123776", + "stat": " 87864 22 2359714 27296 91352 70699 121683034 1085520 0 165920 1112848", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=0\nDEVNAME=sda\nDEVTYPE=disk" + } + }, + "/dev/sda1": { + "DEVLINKS": "/dev/disk/by-id/wwn-0x500a07510d1e6322-part1 /dev/disk/by-id/ata-Crucial_CT120M500SSD3_14350D1E6322-part1 /dev/disk/by-uuid/efb26132-4a85-450c-8e71-0c6fc9a5bbcb", + "DEVNAME": "/dev/sda1", + "DEVPATH": "/devices/pci0000:00/0000:00:11.0/ata1/host1/target1:0:0/1:0:0:0/block/sda/sda1", + "DEVTYPE": "partition", + "ID_ATA": "1", + "ID_ATA_DOWNLOAD_MICROCODE": "1", + "ID_ATA_FEATURE_SET_APM": "1", + "ID_ATA_FEATURE_SET_APM_CURRENT_VALUE": "254", + "ID_ATA_FEATURE_SET_APM_ENABLED": "1", + "ID_ATA_FEATURE_SET_HPA": "1", + "ID_ATA_FEATURE_SET_HPA_ENABLED": "1", + "ID_ATA_FEATURE_SET_PM": "1", + "ID_ATA_FEATURE_SET_PM_ENABLED": "1", + "ID_ATA_FEATURE_SET_SECURITY": "1", + "ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0", + "ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "2", + "ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "2", + "ID_ATA_FEATURE_SET_SECURITY_FROZEN": "1", + "ID_ATA_FEATURE_SET_SMART": "1", + "ID_ATA_FEATURE_SET_SMART_ENABLED": "1", + "ID_ATA_ROTATION_RATE_RPM": "0", + "ID_ATA_SATA": "1", + "ID_ATA_SATA_SIGNAL_RATE_GEN1": "1", + "ID_ATA_SATA_SIGNAL_RATE_GEN2": "1", + "ID_ATA_WRITE_CACHE": "1", + "ID_ATA_WRITE_CACHE_ENABLED": "1", + "ID_BUS": "ata", + "ID_FS_TYPE": "ext2", + "ID_FS_USAGE": "filesystem", + "ID_FS_UUID": "efb26132-4a85-450c-8e71-0c6fc9a5bbcb", + "ID_FS_UUID_ENC": "efb26132-4a85-450c-8e71-0c6fc9a5bbcb", + "ID_FS_VERSION": "1.0", + "ID_MODEL": "Crucial_CT120M500SSD3", + "ID_MODEL_ENC": "Crucial_CT120M500SSD3\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_PART_ENTRY_DISK": "8:0", + "ID_PART_ENTRY_FLAGS": "0x80", + "ID_PART_ENTRY_NUMBER": "1", + "ID_PART_ENTRY_OFFSET": "2048", + "ID_PART_ENTRY_SCHEME": "dos", + "ID_PART_ENTRY_SIZE": "497664", + "ID_PART_ENTRY_TYPE": "0x83", + "ID_PART_ENTRY_UUID": "000701fc-01", + "ID_PART_TABLE_TYPE": "dos", + "ID_PART_TABLE_UUID": "000701fc", + "ID_REVISION": "MU05", + "ID_SERIAL": "Crucial_CT120M500SSD3_14350D1E6322", + "ID_SERIAL_SHORT": "14350D1E6322", + "ID_TYPE": "disk", + "ID_WWN": "0x500a07510d1e6322", + "ID_WWN_WITH_EXTENSION": "0x500a07510d1e6322", + "MAJOR": "8", + "MINOR": "1", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "4753526", + "attrs": { + "alignment_offset": "0", + "dev": "8:1", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "1", + "ro": "0", + "size": "254803968", + "start": "2048", + "stat": " 682 12 13746 196 394 280 364274 3360 0 956 3556", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=1\nDEVNAME=sda1\nDEVTYPE=partition" + } + }, + "/dev/sda2": { + "DEVLINKS": "/dev/disk/by-id/wwn-0x500a07510d1e6322-part2 /dev/disk/by-id/ata-Crucial_CT120M500SSD3_14350D1E6322-part2", + "DEVNAME": "/dev/sda2", + "DEVPATH": "/devices/pci0000:00/0000:00:11.0/ata1/host1/target1:0:0/1:0:0:0/block/sda/sda2", + "DEVTYPE": "partition", + "ID_ATA": "1", + "ID_ATA_DOWNLOAD_MICROCODE": "1", + "ID_ATA_FEATURE_SET_APM": "1", + "ID_ATA_FEATURE_SET_APM_CURRENT_VALUE": "254", + "ID_ATA_FEATURE_SET_APM_ENABLED": "1", + "ID_ATA_FEATURE_SET_HPA": "1", + "ID_ATA_FEATURE_SET_HPA_ENABLED": "1", + "ID_ATA_FEATURE_SET_PM": "1", + "ID_ATA_FEATURE_SET_PM_ENABLED": "1", + "ID_ATA_FEATURE_SET_SECURITY": "1", + "ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0", + "ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "2", + "ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "2", + "ID_ATA_FEATURE_SET_SECURITY_FROZEN": "1", + "ID_ATA_FEATURE_SET_SMART": "1", + "ID_ATA_FEATURE_SET_SMART_ENABLED": "1", + "ID_ATA_ROTATION_RATE_RPM": "0", + "ID_ATA_SATA": "1", + "ID_ATA_SATA_SIGNAL_RATE_GEN1": "1", + "ID_ATA_SATA_SIGNAL_RATE_GEN2": "1", + "ID_ATA_WRITE_CACHE": "1", + "ID_ATA_WRITE_CACHE_ENABLED": "1", + "ID_BUS": "ata", + "ID_MODEL": "Crucial_CT120M500SSD3", + "ID_MODEL_ENC": "Crucial_CT120M500SSD3\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_PART_ENTRY_DISK": "8:0", + "ID_PART_ENTRY_NUMBER": "2", + "ID_PART_ENTRY_OFFSET": "501758", + "ID_PART_ENTRY_SCHEME": "dos", + "ID_PART_ENTRY_SIZE": "233938946", + "ID_PART_ENTRY_TYPE": "0x5", + "ID_PART_ENTRY_UUID": "000701fc-02", + "ID_PART_TABLE_TYPE": "dos", + "ID_PART_TABLE_UUID": "000701fc", + "ID_REVISION": "MU05", + "ID_SERIAL": "Crucial_CT120M500SSD3_14350D1E6322", + "ID_SERIAL_SHORT": "14350D1E6322", + "ID_TYPE": "disk", + "ID_WWN": "0x500a07510d1e6322", + "ID_WWN_WITH_EXTENSION": "0x500a07510d1e6322", + "MAJOR": "8", + "MINOR": "2", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "4744895", + "attrs": { + "alignment_offset": "1024", + "dev": "8:2", + "discard_alignment": "1024", + "inflight": " 0 0", + "partition": "2", + "ro": "0", + "size": "1024", + "start": "501758", + "stat": " 7 0 14 4 0 0 0 0 0 4 4", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=2\nDEVNAME=sda2\nDEVTYPE=partition" + } + }, + "/dev/sda5": { + "DEVLINKS": "/dev/disk/by-id/lvm-pv-uuid-rfx2vc-pVY3-KC0A-fmAT-Scv4-dSKP-HnEd1c /dev/disk/by-id/ata-Crucial_CT120M500SSD3_14350D1E6322-part5 /dev/disk/by-id/wwn-0x500a07510d1e6322-part5", + "DEVNAME": "/dev/sda5", + "DEVPATH": "/devices/pci0000:00/0000:00:11.0/ata1/host1/target1:0:0/1:0:0:0/block/sda/sda5", + "DEVTYPE": "partition", + "ID_ATA": "1", + "ID_ATA_DOWNLOAD_MICROCODE": "1", + "ID_ATA_FEATURE_SET_APM": "1", + "ID_ATA_FEATURE_SET_APM_CURRENT_VALUE": "254", + "ID_ATA_FEATURE_SET_APM_ENABLED": "1", + "ID_ATA_FEATURE_SET_HPA": "1", + "ID_ATA_FEATURE_SET_HPA_ENABLED": "1", + "ID_ATA_FEATURE_SET_PM": "1", + "ID_ATA_FEATURE_SET_PM_ENABLED": "1", + "ID_ATA_FEATURE_SET_SECURITY": "1", + "ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0", + "ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "2", + "ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "2", + "ID_ATA_FEATURE_SET_SECURITY_FROZEN": "1", + "ID_ATA_FEATURE_SET_SMART": "1", + "ID_ATA_FEATURE_SET_SMART_ENABLED": "1", + "ID_ATA_ROTATION_RATE_RPM": "0", + "ID_ATA_SATA": "1", + "ID_ATA_SATA_SIGNAL_RATE_GEN1": "1", + "ID_ATA_SATA_SIGNAL_RATE_GEN2": "1", + "ID_ATA_WRITE_CACHE": "1", + "ID_ATA_WRITE_CACHE_ENABLED": "1", + "ID_BUS": "ata", + "ID_FS_TYPE": "LVM2_member", + "ID_FS_USAGE": "raid", + "ID_FS_UUID": "rfx2vc-pVY3-KC0A-fmAT-Scv4-dSKP-HnEd1c", + "ID_FS_UUID_ENC": "rfx2vc-pVY3-KC0A-fmAT-Scv4-dSKP-HnEd1c", + "ID_FS_VERSION": "LVM2 001", + "ID_MODEL": "LVM PV rfx2vc-pVY3-KC0A-fmAT-Scv4-dSKP-HnEd1c on /dev/sda5", + "ID_MODEL_ENC": "Crucial_CT120M500SSD3\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_PART_ENTRY_DISK": "8:0", + "ID_PART_ENTRY_NUMBER": "5", + "ID_PART_ENTRY_OFFSET": "501760", + "ID_PART_ENTRY_SCHEME": "dos", + "ID_PART_ENTRY_SIZE": "233938944", + "ID_PART_ENTRY_TYPE": "0x8e", + "ID_PART_ENTRY_UUID": "000701fc-05", + "ID_PART_TABLE_TYPE": "dos", + "ID_PART_TABLE_UUID": "000701fc", + "ID_REVISION": "MU05", + "ID_SERIAL": "Crucial_CT120M500SSD3_14350D1E6322", + "ID_SERIAL_SHORT": "14350D1E6322", + "ID_TYPE": "disk", + "ID_WWN": "0x500a07510d1e6322", + "ID_WWN_WITH_EXTENSION": "0x500a07510d1e6322", + "MAJOR": "8", + "MINOR": "5", + "SUBSYSTEM": "block", + "SYSTEMD_ALIAS": "/dev/block/8:5", + "SYSTEMD_READY": "1", + "SYSTEMD_WANTS": "lvm2-pvscan@8:5.service", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "4746898", + "attrs": { + "alignment_offset": "0", + "dev": "8:5", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "5", + "ro": "0", + "size": "119776739328", + "start": "501760", + "stat": " 87046 10 2343162 27084 80748 70419 121318760 1036192 0 119344 1063312", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=5\nDEVNAME=sda5\nDEVTYPE=partition" + } + }, + "/dev/sdb": { + "DEVLINKS": "/dev/disk/by-path/pci-0000:00:10.1-usb-0:1:1.0-scsi-0:0:0:0 /dev/disk/by-id/usb-Hitachi_HDS5C3020ALA632_152D00539000-0:0", + "DEVNAME": "/dev/sdb", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-1/4-1:1.0/host9/target9:0:0/9:0:0:0/block/sdb", + "DEVTYPE": "disk", + "ID_BUS": "usb", + "ID_INSTANCE": "0:0", + "ID_MODEL": "HDS5C3020ALA632", + "ID_MODEL_ENC": "HDS5C3020ALA632\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_TABLE_TYPE": "dos", + "ID_PART_TABLE_UUID": "60866121", + "ID_PATH": "pci-0000:00:10.1-usb-0:1:1.0-scsi-0:0:0:0", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_1_1_0-scsi-0_0_0_0", + "ID_REVISION": "0125", + "ID_SERIAL": "Hitachi_HDS5C3020ALA632_152D00539000-0:0", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "Hitachi", + "ID_VENDOR_ENC": "Hitachi\\x20", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "16", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "161572560532", + "attrs": { + "alignment_offset": "0", + "bdi": null, + "capability": "50", + "dev": "8:16", + "device": null, + "discard_alignment": "0", + "events": "", + "events_async": "", + "events_poll_msecs": "-1", + "ext_range": "256", + "inflight": " 0 0", + "range": "16", + "removable": "0", + "ro": "0", + "size": "2000398934016", + "stat": " 211961 147132 2885082 235760 4 0 32 0 0 192416 235616", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=16\nDEVNAME=sdb\nDEVTYPE=disk" + } + }, + "/dev/sdb1": { + "DEVLINKS": "/dev/disk/by-uuid/e52be4f9-810a-43ab-ba79-a460f9d154a0 /dev/disk/by-path/pci-0000:00:10.1-usb-0:1:1.0-scsi-0:0:0:0-part1 /dev/disk/by-id/usb-Hitachi_HDS5C3020ALA632_152D00539000-0:0-part1", + "DEVNAME": "/dev/sdb1", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-1/4-1:1.0/host9/target9:0:0/9:0:0:0/block/sdb/sdb1", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_FS_TYPE": "ext4", + "ID_FS_USAGE": "filesystem", + "ID_FS_UUID": "e52be4f9-810a-43ab-ba79-a460f9d154a0", + "ID_FS_UUID_ENC": "e52be4f9-810a-43ab-ba79-a460f9d154a0", + "ID_FS_VERSION": "1.0", + "ID_INSTANCE": "0:0", + "ID_MODEL": "HDS5C3020ALA632", + "ID_MODEL_ENC": "HDS5C3020ALA632\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:16", + "ID_PART_ENTRY_NUMBER": "1", + "ID_PART_ENTRY_OFFSET": "2048", + "ID_PART_ENTRY_SCHEME": "dos", + "ID_PART_ENTRY_SIZE": "3907027120", + "ID_PART_ENTRY_TYPE": "0x83", + "ID_PART_ENTRY_UUID": "60866121-01", + "ID_PART_TABLE_TYPE": "dos", + "ID_PART_TABLE_UUID": "60866121", + "ID_PATH": "pci-0000:00:10.1-usb-0:1:1.0-scsi-0:0:0:0", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_1_1_0-scsi-0_0_0_0", + "ID_REVISION": "0125", + "ID_SERIAL": "Hitachi_HDS5C3020ALA632_152D00539000-0:0", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "Hitachi", + "ID_VENDOR_ENC": "Hitachi\\x20", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "17", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "161572601986", + "attrs": { + "alignment_offset": "0", + "dev": "8:17", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "1", + "ro": "0", + "size": "2000397885440", + "start": "2048", + "stat": " 211915 147132 2884282 235688 4 0 32 0 0 192344 235544", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=17\nDEVNAME=sdb1\nDEVTYPE=partition" + } + }, + "/dev/sdc": { + "DEVLINKS": "/dev/disk/by-path/pci-0000:00:10.1-usb-0:1:1.0-scsi-0:0:0:1 /dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:1", + "DEVNAME": "/dev/sdc", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-1/4-1:1.0/host9/target9:0:0/9:0:0:1/block/sdc", + "DEVTYPE": "disk", + "ID_BUS": "usb", + "ID_INSTANCE": "0:1", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_TABLE_TYPE": "dos", + "ID_PART_TABLE_UUID": "60866121", + "ID_PATH": "pci-0000:00:10.1-usb-0:1:1.0-scsi-0:0:0:1", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_1_1_0-scsi-0_0_0_1", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:1", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "32", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "161572551409", + "attrs": { + "alignment_offset": "0", + "bdi": null, + "capability": "50", + "dev": "8:32", + "device": null, + "discard_alignment": "0", + "events": "", + "events_async": "", + "events_poll_msecs": "-1", + "ext_range": "256", + "inflight": " 0 0", + "range": "16", + "removable": "0", + "ro": "0", + "size": "2000398934016", + "stat": " 213557 146788 2884826 191548 0 0 0 0 0 167972 191296", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=32\nDEVNAME=sdc\nDEVTYPE=disk" + } + }, + "/dev/sdc1": { + "DEVLINKS": "/dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:1-part1 /dev/disk/by-uuid/e52be4f9-810a-43ab-ba79-a460f9d154a0 /dev/disk/by-path/pci-0000:00:10.1-usb-0:1:1.0-scsi-0:0:0:1-part1", + "DEVNAME": "/dev/sdc1", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-1/4-1:1.0/host9/target9:0:0/9:0:0:1/block/sdc/sdc1", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_FS_TYPE": "ext4", + "ID_FS_USAGE": "filesystem", + "ID_FS_UUID": "e52be4f9-810a-43ab-ba79-a460f9d154a0", + "ID_FS_UUID_ENC": "e52be4f9-810a-43ab-ba79-a460f9d154a0", + "ID_FS_VERSION": "1.0", + "ID_INSTANCE": "0:1", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:32", + "ID_PART_ENTRY_NUMBER": "1", + "ID_PART_ENTRY_OFFSET": "2048", + "ID_PART_ENTRY_SCHEME": "dos", + "ID_PART_ENTRY_SIZE": "3907027120", + "ID_PART_ENTRY_TYPE": "0x83", + "ID_PART_ENTRY_UUID": "60866121-01", + "ID_PART_TABLE_TYPE": "dos", + "ID_PART_TABLE_UUID": "60866121", + "ID_PATH": "pci-0000:00:10.1-usb-0:1:1.0-scsi-0:0:0:1", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_1_1_0-scsi-0_0_0_1", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:1", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "33", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "161572597299", + "attrs": { + "alignment_offset": "0", + "dev": "8:33", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "1", + "ro": "0", + "size": "2000397885440", + "start": "2048", + "stat": " 213511 146788 2884026 191448 0 0 0 0 0 167872 191196", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=33\nDEVNAME=sdc1\nDEVTYPE=partition" + } + }, + "/dev/sdf": { + "DEVLINKS": "/dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:0 /dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:0", + "DEVNAME": "/dev/sdf", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:0/block/sdf", + "DEVTYPE": "disk", + "ID_BUS": "usb", + "ID_INSTANCE": "0:0", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_TABLE_TYPE": "gpt", + "ID_PART_TABLE_UUID": "882fd323-afc8-ca41-9ecb-8070e9657c26", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:0", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_0", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:0", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "80", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6791409", + "attrs": { + "alignment_offset": "0", + "bdi": null, + "capability": "50", + "dev": "8:80", + "device": null, + "discard_alignment": "0", + "events": "", + "events_async": "", + "events_poll_msecs": "-1", + "ext_range": "256", + "inflight": " 0 0", + "range": "16", + "removable": "0", + "ro": "0", + "size": "2000398934016", + "stat": " 6963835 86830 1078799645 52530852 102692 30 1561118 92936 0 22152132 52614972", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=80\nDEVNAME=sdf\nDEVTYPE=disk" + } + }, + "/dev/sdf1": { + "DEVLINKS": "/dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:0-part1 /dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:0-part1 /dev/disk/by-partlabel/zfs /dev/disk/by-partuuid/caa78e7a-3540-f548-9d09-c9c589f85e90", + "DEVNAME": "/dev/sdf1", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:0/block/sdf/sdf1", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_FS_LABEL": "test2", + "ID_FS_LABEL_ENC": "test2", + "ID_FS_TYPE": "zfs_member", + "ID_FS_USAGE": "raid", + "ID_FS_UUID": "18330803618132730915", + "ID_FS_UUID_ENC": "18330803618132730915", + "ID_FS_UUID_SUB": "18116658753708879961", + "ID_FS_UUID_SUB_ENC": "18116658753708879961", + "ID_FS_VERSION": "5000", + "ID_INSTANCE": "0:0", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:80", + "ID_PART_ENTRY_NAME": "zfs", + "ID_PART_ENTRY_NUMBER": "1", + "ID_PART_ENTRY_OFFSET": "2048", + "ID_PART_ENTRY_SCHEME": "gpt", + "ID_PART_ENTRY_SIZE": "3907010560", + "ID_PART_ENTRY_TYPE": "6a898cc3-1dd2-11b2-99a6-080020736631", + "ID_PART_ENTRY_UUID": "caa78e7a-3540-f548-9d09-c9c589f85e90", + "ID_PART_TABLE_TYPE": "gpt", + "ID_PART_TABLE_UUID": "882fd323-afc8-ca41-9ecb-8070e9657c26", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:0", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_0", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:0", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "81", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6847988", + "attrs": { + "alignment_offset": "0", + "dev": "8:81", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "1", + "ro": "0", + "size": "2000389406720", + "start": "2048", + "stat": " 6963530 86830 1078782901 52527660 102692 30 1561118 92936 0 22150144 52611772", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=81\nDEVNAME=sdf1\nDEVTYPE=partition" + } + }, + "/dev/sdf9": { + "DEVLINKS": "/dev/disk/by-partuuid/e8b912e2-0ff9-3747-8c55-d698d3864530 /dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:0-part9 /dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:0-part9", + "DEVNAME": "/dev/sdf9", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:0/block/sdf/sdf9", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_INSTANCE": "0:0", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:80", + "ID_PART_ENTRY_NUMBER": "9", + "ID_PART_ENTRY_OFFSET": "3907012608", + "ID_PART_ENTRY_SCHEME": "gpt", + "ID_PART_ENTRY_SIZE": "16384", + "ID_PART_ENTRY_TYPE": "6a945a3b-1dd2-11b2-99a6-080020736631", + "ID_PART_ENTRY_UUID": "e8b912e2-0ff9-3747-8c55-d698d3864530", + "ID_PART_TABLE_TYPE": "gpt", + "ID_PART_TABLE_UUID": "882fd323-afc8-ca41-9ecb-8070e9657c26", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:0", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_0", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:0", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "89", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6850013", + "attrs": { + "alignment_offset": "0", + "dev": "8:89", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "9", + "ro": "0", + "size": "8388608", + "start": "3907012608", + "stat": " 172 0 12016 1792 0 0 0 0 0 748 1792", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=89\nDEVNAME=sdf9\nDEVTYPE=partition" + } + }, + "/dev/sdg": { + "DEVLINKS": "/dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:1 /dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:1", + "DEVNAME": "/dev/sdg", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:1/block/sdg", + "DEVTYPE": "disk", + "ID_BUS": "usb", + "ID_INSTANCE": "0:1", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_TABLE_TYPE": "gpt", + "ID_PART_TABLE_UUID": "512254cd-07e1-9145-8bdd-e82db5f76c1d", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:1", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_1", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:1", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "96", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6809723", + "attrs": { + "alignment_offset": "0", + "bdi": null, + "capability": "50", + "dev": "8:96", + "device": null, + "discard_alignment": "0", + "events": "", + "events_async": "", + "events_poll_msecs": "-1", + "ext_range": "256", + "inflight": " 0 0", + "range": "16", + "removable": "0", + "ro": "0", + "size": "2000398934016", + "stat": " 6972701 87320 1079040822 53072876 103038 42 1570160 93916 0 22207732 53157516", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=96\nDEVNAME=sdg\nDEVTYPE=disk" + } + }, + "/dev/sdg1": { + "DEVLINKS": "/dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:1-part1 /dev/disk/by-partuuid/65c56c76-4860-f04f-b2fe-5617f38cc832 /dev/disk/by-partlabel/zfs /dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:1-part1", + "DEVNAME": "/dev/sdg1", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:1/block/sdg/sdg1", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_FS_LABEL": "test2", + "ID_FS_LABEL_ENC": "test2", + "ID_FS_TYPE": "zfs_member", + "ID_FS_USAGE": "raid", + "ID_FS_UUID": "18330803618132730915", + "ID_FS_UUID_ENC": "18330803618132730915", + "ID_FS_UUID_SUB": "14990692260026163009", + "ID_FS_UUID_SUB_ENC": "14990692260026163009", + "ID_FS_VERSION": "5000", + "ID_INSTANCE": "0:1", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:96", + "ID_PART_ENTRY_NAME": "zfs", + "ID_PART_ENTRY_NUMBER": "1", + "ID_PART_ENTRY_OFFSET": "2048", + "ID_PART_ENTRY_SCHEME": "gpt", + "ID_PART_ENTRY_SIZE": "3907010560", + "ID_PART_ENTRY_TYPE": "6a898cc3-1dd2-11b2-99a6-080020736631", + "ID_PART_ENTRY_UUID": "65c56c76-4860-f04f-b2fe-5617f38cc832", + "ID_PART_TABLE_TYPE": "gpt", + "ID_PART_TABLE_UUID": "512254cd-07e1-9145-8bdd-e82db5f76c1d", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:1", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_1", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:1", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "97", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6853176", + "attrs": { + "alignment_offset": "0", + "dev": "8:97", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "1", + "ro": "0", + "size": "2000389406720", + "start": "2048", + "stat": " 6972414 87320 1079024246 53070932 103038 42 1570160 93916 0 22206308 53155564", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=97\nDEVNAME=sdg1\nDEVTYPE=partition" + } + }, + "/dev/sdg9": { + "DEVLINKS": "/dev/disk/by-partuuid/b01f1a7e-7279-9f45-97de-f74e05d00c00 /dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:1-part9 /dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:1-part9", + "DEVNAME": "/dev/sdg9", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:1/block/sdg/sdg9", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_INSTANCE": "0:1", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:96", + "ID_PART_ENTRY_NUMBER": "9", + "ID_PART_ENTRY_OFFSET": "3907012608", + "ID_PART_ENTRY_SCHEME": "gpt", + "ID_PART_ENTRY_SIZE": "16384", + "ID_PART_ENTRY_TYPE": "6a945a3b-1dd2-11b2-99a6-080020736631", + "ID_PART_ENTRY_UUID": "b01f1a7e-7279-9f45-97de-f74e05d00c00", + "ID_PART_TABLE_TYPE": "gpt", + "ID_PART_TABLE_UUID": "512254cd-07e1-9145-8bdd-e82db5f76c1d", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:1", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_1", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:1", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "105", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6847526", + "attrs": { + "alignment_offset": "0", + "dev": "8:105", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "9", + "ro": "0", + "size": "8388608", + "start": "3907012608", + "stat": " 156 0 11888 504 0 0 0 0 0 264 504", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=105\nDEVNAME=sdg9\nDEVTYPE=partition" + } + }, + "/dev/sdh": { + "DEVLINKS": "/dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:2 /dev/disk/by-id/usb-Hitachi_HDS5C3020ALA632_152D00539000-0:2", + "DEVNAME": "/dev/sdh", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:2/block/sdh", + "DEVTYPE": "disk", + "ID_BUS": "usb", + "ID_FS_TYPE": "linux_raid_member", + "ID_FS_USAGE": "raid", + "ID_FS_UUID": "0a9a6eae-e753-4128-98b6-d86b4162b4c6", + "ID_FS_UUID_ENC": "0a9a6eae-e753-4128-98b6-d86b4162b4c6", + "ID_FS_VERSION": "0.90.0", + "ID_INSTANCE": "0:2", + "ID_MODEL": "HDS5C3020ALA632", + "ID_MODEL_ENC": "HDS5C3020ALA632\\x20", + "ID_MODEL_ID": "0567", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:2", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_2", + "ID_REVISION": "0125", + "ID_SERIAL": "Hitachi_HDS5C3020ALA632_152D00539000-0:2", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "Hitachi", + "ID_VENDOR_ENC": "Hitachi\\x20", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "112", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6545733", + "attrs": { + "alignment_offset": "0", + "bdi": null, + "capability": "50", + "dev": "8:112", + "device": null, + "discard_alignment": "0", + "events": "", + "events_async": "", + "events_poll_msecs": "-1", + "ext_range": "256", + "inflight": " 0 0", + "range": "16", + "removable": "0", + "ro": "0", + "size": "2000398934016", + "stat": " 6938180 85938 1076285186 52558944 128935 41 4192766 249848 0 22126748 52799840", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=112\nDEVNAME=sdh\nDEVTYPE=disk" + } + }, + "/dev/sdh1": { + "DEVLINKS": "/dev/disk/by-partuuid/c9049bb1-4283-fe4e-84b5-cb8cfba76bdc /dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:2-part1 /dev/disk/by-id/usb-Hitachi_HDS5C3020ALA632_152D00539000-0:2-part1 /dev/disk/by-partlabel/zfs", + "DEVNAME": "/dev/sdh1", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:2/block/sdh/sdh1", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_FS_LABEL": "test2", + "ID_FS_LABEL_ENC": "test2", + "ID_FS_TYPE": "zfs_member", + "ID_FS_USAGE": "raid", + "ID_FS_UUID": "18330803618132730915", + "ID_FS_UUID_ENC": "18330803618132730915", + "ID_FS_UUID_SUB": "17642984744436519357", + "ID_FS_UUID_SUB_ENC": "17642984744436519357", + "ID_FS_VERSION": "5000", + "ID_INSTANCE": "0:2", + "ID_MODEL": "HDS5C3020ALA632", + "ID_MODEL_ENC": "HDS5C3020ALA632\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:112", + "ID_PART_ENTRY_NAME": "zfs", + "ID_PART_ENTRY_NUMBER": "1", + "ID_PART_ENTRY_OFFSET": "2048", + "ID_PART_ENTRY_SCHEME": "gpt", + "ID_PART_ENTRY_SIZE": "3907010560", + "ID_PART_ENTRY_TYPE": "6a898cc3-1dd2-11b2-99a6-080020736631", + "ID_PART_ENTRY_UUID": "c9049bb1-4283-fe4e-84b5-cb8cfba76bdc", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:2", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_2", + "ID_REVISION": "0125", + "ID_SERIAL": "Hitachi_HDS5C3020ALA632_152D00539000-0:2", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "Hitachi", + "ID_VENDOR_ENC": "Hitachi\\x20", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "113", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6716901", + "attrs": { + "alignment_offset": "0", + "dev": "8:113", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "1", + "ro": "0", + "size": "2000389406720", + "start": "2048", + "stat": " 6937999 85938 1076270250 52556992 128935 41 4192766 249848 0 22125472 52797860", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=113\nDEVNAME=sdh1\nDEVTYPE=partition" + } + }, + "/dev/sdh9": { + "DEVLINKS": "/dev/disk/by-id/usb-Hitachi_HDS5C3020ALA632_152D00539000-0:2-part9 /dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:2-part9 /dev/disk/by-partuuid/fde58a4c-34c2-dd4a-b6f3-0e73fe651afd", + "DEVNAME": "/dev/sdh9", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:2/block/sdh/sdh9", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_FS_TYPE": "linux_raid_member", + "ID_FS_USAGE": "raid", + "ID_FS_UUID": "0a9a6eae-e753-4128-98b6-d86b4162b4c6", + "ID_FS_UUID_ENC": "0a9a6eae-e753-4128-98b6-d86b4162b4c6", + "ID_FS_VERSION": "0.90.0", + "ID_INSTANCE": "0:2", + "ID_MODEL": "HDS5C3020ALA632", + "ID_MODEL_ENC": "HDS5C3020ALA632\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:112", + "ID_PART_ENTRY_NUMBER": "9", + "ID_PART_ENTRY_OFFSET": "3907012608", + "ID_PART_ENTRY_SCHEME": "gpt", + "ID_PART_ENTRY_SIZE": "16384", + "ID_PART_ENTRY_TYPE": "6a945a3b-1dd2-11b2-99a6-080020736631", + "ID_PART_ENTRY_UUID": "fde58a4c-34c2-dd4a-b6f3-0e73fe651afd", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:2", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_2", + "ID_REVISION": "0125", + "ID_SERIAL": "Hitachi_HDS5C3020ALA632_152D00539000-0:2", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "Hitachi", + "ID_VENDOR_ENC": "Hitachi\\x20", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "121", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6758735", + "attrs": { + "alignment_offset": "0", + "dev": "8:121", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "9", + "ro": "0", + "size": "8388608", + "start": "3907012608", + "stat": " 134 0 11712 708 0 0 0 0 0 416 708", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=121\nDEVNAME=sdh9\nDEVTYPE=partition" + } + }, + "/dev/sdi": { + "DEVLINKS": "/dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:3 /dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:3", + "DEVNAME": "/dev/sdi", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:3/block/sdi", + "DEVTYPE": "disk", + "ID_BUS": "usb", + "ID_INSTANCE": "0:3", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_TABLE_TYPE": "gpt", + "ID_PART_TABLE_UUID": "1c6efd95-20bf-0e43-a48c-314fc01e2013", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:3", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_3", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:3", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "128", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6772658", + "attrs": { + "alignment_offset": "0", + "bdi": null, + "capability": "50", + "dev": "8:128", + "device": null, + "discard_alignment": "0", + "events": "", + "events_async": "", + "events_poll_msecs": "-1", + "ext_range": "256", + "inflight": " 0 0", + "range": "16", + "removable": "0", + "ro": "0", + "size": "2000398934016", + "stat": " 6955949 86319 1078766342 52280320 102863 34 1566144 93804 0 22043464 52365304", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=128\nDEVNAME=sdi\nDEVTYPE=disk" + } + }, + "/dev/sdi1": { + "DEVLINKS": "/dev/disk/by-partuuid/87d499ac-fee0-f24a-9f53-f800af3debc5 /dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:3-part1 /dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:3-part1 /dev/disk/by-partlabel/zfs", + "DEVNAME": "/dev/sdi1", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:3/block/sdi/sdi1", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_FS_LABEL": "test2", + "ID_FS_LABEL_ENC": "test2", + "ID_FS_TYPE": "zfs_member", + "ID_FS_USAGE": "raid", + "ID_FS_UUID": "18330803618132730915", + "ID_FS_UUID_ENC": "18330803618132730915", + "ID_FS_UUID_SUB": "11720289127315922372", + "ID_FS_UUID_SUB_ENC": "11720289127315922372", + "ID_FS_VERSION": "5000", + "ID_INSTANCE": "0:3", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:128", + "ID_PART_ENTRY_NAME": "zfs", + "ID_PART_ENTRY_NUMBER": "1", + "ID_PART_ENTRY_OFFSET": "2048", + "ID_PART_ENTRY_SCHEME": "gpt", + "ID_PART_ENTRY_SIZE": "3907010560", + "ID_PART_ENTRY_TYPE": "6a898cc3-1dd2-11b2-99a6-080020736631", + "ID_PART_ENTRY_UUID": "87d499ac-fee0-f24a-9f53-f800af3debc5", + "ID_PART_TABLE_TYPE": "gpt", + "ID_PART_TABLE_UUID": "1c6efd95-20bf-0e43-a48c-314fc01e2013", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:3", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_3", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:3", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "129", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6826286", + "attrs": { + "alignment_offset": "0", + "dev": "8:129", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "1", + "ro": "0", + "size": "2000389406720", + "start": "2048", + "stat": " 6955658 86319 1078749710 52276744 102863 34 1566144 93804 0 22041144 52361728", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=129\nDEVNAME=sdi1\nDEVTYPE=partition" + } + }, + "/dev/sdi9": { + "DEVLINKS": "/dev/disk/by-partuuid/74b45b8f-df47-9740-a7af-6ab7f83a2476 /dev/disk/by-path/pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:3-part9 /dev/disk/by-id/usb-ST2000DM_001-9YN164_152D00539000-0:3-part9", + "DEVNAME": "/dev/sdi9", + "DEVPATH": "/devices/pci0000:00/0000:00:10.1/usb4/4-2/4-2:1.0/host2/target2:0:0/2:0:0:3/block/sdi/sdi9", + "DEVTYPE": "partition", + "ID_BUS": "usb", + "ID_INSTANCE": "0:3", + "ID_MODEL": "001-9YN164", + "ID_MODEL_ENC": "001-9YN164\\x20\\x20\\x20\\x20\\x20\\x20", + "ID_MODEL_ID": "0567", + "ID_PART_ENTRY_DISK": "8:128", + "ID_PART_ENTRY_NUMBER": "9", + "ID_PART_ENTRY_OFFSET": "3907012608", + "ID_PART_ENTRY_SCHEME": "gpt", + "ID_PART_ENTRY_SIZE": "16384", + "ID_PART_ENTRY_TYPE": "6a945a3b-1dd2-11b2-99a6-080020736631", + "ID_PART_ENTRY_UUID": "74b45b8f-df47-9740-a7af-6ab7f83a2476", + "ID_PART_TABLE_TYPE": "gpt", + "ID_PART_TABLE_UUID": "1c6efd95-20bf-0e43-a48c-314fc01e2013", + "ID_PATH": "pci-0000:00:10.1-usb-0:2:1.0-scsi-0:0:0:3", + "ID_PATH_TAG": "pci-0000_00_10_1-usb-0_2_1_0-scsi-0_0_0_3", + "ID_REVISION": "0125", + "ID_SERIAL": "ST2000DM_001-9YN164_152D00539000-0:3", + "ID_SERIAL_SHORT": "152D00539000", + "ID_TYPE": "disk", + "ID_USB_DRIVER": "usb-storage", + "ID_USB_INTERFACES": ":080650:", + "ID_USB_INTERFACE_NUM": "00", + "ID_VENDOR": "ST2000DM", + "ID_VENDOR_ENC": "ST2000DM", + "ID_VENDOR_ID": "152d", + "MAJOR": "8", + "MINOR": "137", + "SUBSYSTEM": "block", + "TAGS": ":systemd:", + "USEC_INITIALIZED": "6828558", + "attrs": { + "alignment_offset": "0", + "dev": "8:137", + "discard_alignment": "0", + "inflight": " 0 0", + "partition": "9", + "ro": "0", + "size": "8388608", + "start": "3907012608", + "stat": " 156 0 11888 1760 0 0 0 0 0 788 1760", + "subsystem": "block", + "uevent": "MAJOR=8\nMINOR=137\nDEVNAME=sdi9\nDEVTYPE=partition" + } + } + } +} diff --git a/subiquity/controllers/filesystem.py b/subiquity/controllers/filesystem.py index ef69137c..3717679c 100644 --- a/subiquity/controllers/filesystem.py +++ b/subiquity/controllers/filesystem.py @@ -17,11 +17,11 @@ import logging import os from subiquity.controller import ControllerPolicy from subiquity.models.actions import preserve_action -from subiquity.models import (FilesystemModel, IscsiDiskModel, RaidModel, - CephDiskModel) +from subiquity.models import (FilesystemModel, + RaidModel) from subiquity.ui.views import (DiskPartitionView, AddPartitionView, FilesystemView, DiskInfoView, - RaidView, CephDiskView, IscsiDiskView) + RaidView) import subiquity.utils as utils from subiquity.ui.dummy import DummyView from subiquity.curtin import (curtin_write_storage_actions, @@ -38,8 +38,8 @@ class FilesystemController(ControllerPolicy): def __init__(self, common): super().__init__(common) self.model = FilesystemModel(self.prober, self.opts) - self.iscsi_model = IscsiDiskModel() - self.ceph_model = CephDiskModel() + #self.iscsi_model = IscsiDiskModel() + #self.ceph_model = CephDiskModel() self.raid_model = RaidModel() def filesystem(self, reset=False): @@ -172,7 +172,7 @@ class FilesystemController(ControllerPolicy): self.ui.set_body(DummyView(self.signal)) def create_raid(self, *args, **kwargs): - title = ("Disk and filesystem setup") + title = ("Create software RAID (\"MD\") disk") footer = ("ENTER on a disk will show detailed " "information for that disk") excerpt = ("Use SPACE to select disks to form your RAID array, " @@ -181,9 +181,14 @@ class FilesystemController(ControllerPolicy): "the same size and speed.") self.ui.set_header(title, excerpt) self.ui.set_footer(footer) - self.ui.set_body(RaidView(self.raid_model, + self.ui.set_body(RaidView(self.model, self.signal)) + def add_raid_dev(self, result): + log.debug('add_raid_dev: result={}'.format(result)) + self.model.add_raid_device(result) + self.signal.emit_signal('filesystem:show') + def setup_bcache(self, *args, **kwargs): self.ui.set_body(DummyView(self.signal)) @@ -216,4 +221,5 @@ class FilesystemController(ControllerPolicy): if self.opts.dry_run and self.opts.uefi: log.debug('forcing is_uefi True beacuse of options') return True + return os.path.exists('/sys/firmware/efi') diff --git a/subiquity/controllers/raid.py b/subiquity/controllers/raid.py new file mode 100644 index 00000000..8c324788 --- /dev/null +++ b/subiquity/controllers/raid.py @@ -0,0 +1,32 @@ +# Copyright 2015 Canonical, Ltd. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import logging +from subiquity.models import RaidDiskModel +from subiquity.controller import ControllerPolicy + +log = logging.getLogger("subiquity.controller.raid") + + +class RaidDiskController(ControllerPolicy): + def __init__(self, common): + super().__init__(common) + self.model = RaidDiskModel() + + def raid(self): + pass + + def raid_handler(self): + pass diff --git a/subiquity/models/actions.py b/subiquity/models/actions.py index 955ae130..69f28e01 100644 --- a/subiquity/models/actions.py +++ b/subiquity/models/actions.py @@ -121,6 +121,26 @@ class DiskAction(): return yaml.dump(self.get(), default_flow_style=False) +class RaidAction(DiskAction): + def __init__(self, action_id, raidlevel, dev_ids, spare_ids): + self._action_id = action_id + self.parent = None + self._raidlevel = raidlevel + self._devices = dev_ids + self._spares = spare_ids + + def get(self): + action = { + 'id': self.action_id, + 'name': self.action_id, + 'raidlevel': self._raidlevel, + 'devices': self._devices, + 'spare_devices': self._spares, + 'type': 'raid', + } + return action + + class PartitionAction(DiskAction): def __init__(self, parent, partnum, offset, size, flags=None): self.parent = parent diff --git a/subiquity/models/blockdev.py b/subiquity/models/blockdev.py index 899f3f66..7dca07cf 100644 --- a/subiquity/models/blockdev.py +++ b/subiquity/models/blockdev.py @@ -24,7 +24,8 @@ from .actions import ( DiskAction, PartitionAction, FormatAction, - MountAction + MountAction, + RaidAction, ) log = logging.getLogger("subiquity.filesystem.blockdev") @@ -125,6 +126,7 @@ class Blockdev(): self._mounts = {} self.bcache = [] self.lvm = [] + self.holder = {} self.baseaction = DiskAction(os.path.basename(self.disk.devpath), self.disk.model, self.disk.serial, self.disk.parttype) @@ -136,6 +138,7 @@ class Blockdev(): self._mounts = {} self.bcache = [] self.lvm = [] + self.holder = {} @property def devpath(self): @@ -165,11 +168,17 @@ class Blockdev(): def filesystems(self): return self._filesystems + @property + def percent_free(self): + ''' return the device free percentage of the whole device''' + percent = ( int((1.0 - (self.usedspace / self.size)) * 100)) + return percent + @property def available(self): ''' return True if has free space or partitions not assigned ''' - if not self.is_mounted() and self.freespace > 0.0: + if not self.is_mounted() and self.percent_free > 0: return True return False @@ -269,6 +278,9 @@ class Blockdev(): log.debug('Partition Added') return new_size + def set_holder(self, devpath, holdtype): + self.holder[holdtype] = devpath + def is_mounted(self): with open('/proc/mounts') as pm: mounts = pm.read() @@ -317,7 +329,7 @@ class Blockdev(): def sort_actions(self, actions): def type_index(t): - order = ['disk', 'partition', 'format', 'mount'] + order = ['disk', 'partition', 'raid', 'format', 'mount'] return order.index(t.get('type')) def path_count(p): @@ -349,6 +361,19 @@ class Blockdev(): return fs_table +class Raiddev(Blockdev): + def __init__(self, devpath, serial, model, parttype, size, + raid_level, raid_devices, spare_devices): + super().__init__(devpath, serial, model, parttype, size) + self._raid_devices = raid_devices + self._raid_level = raid_level + self._spare_devices = spare_devices + self.baseaction = RaidAction(os.path.basename(self.disk.devpath), + self._raid_devices, + self._raid_level, + self._spare_devices) + + if __name__ == '__main__': def get_filesystems(devices): print("FILE SYSTEM") diff --git a/subiquity/models/filesystem.py b/subiquity/models/filesystem.py index d3c7ee53..8eca33c6 100644 --- a/subiquity/models/filesystem.py +++ b/subiquity/models/filesystem.py @@ -16,7 +16,7 @@ import json import logging -from .blockdev import Blockdev +from .blockdev import Blockdev, Raiddev import math from subiquity.model import ModelPolicy @@ -25,6 +25,10 @@ HUMAN_UNITS = ['B', 'K', 'M', 'G', 'T', 'P'] log = logging.getLogger('subiquity.models.filesystem') +class AttrDict(dict): + __getattr__ = dict.__getitem__ + __setattr__ = dict.__setitem__ + class FilesystemModel(ModelPolicy): """ Model representing storage options """ @@ -58,7 +62,10 @@ class FilesystemModel(ModelPolicy): 'create_swap_entire_device'), ('Show disk information', 'filesystem:show-disk-information', - 'show_disk_information') + 'show_disk_information'), + ('Add Raid Device', + 'filesystem:add-raid-dev', + 'add_raid_dev'), ] # TODO: Re-add once curtin supports this. @@ -72,9 +79,9 @@ class FilesystemModel(ModelPolicy): # ('Create volume group (LVM2)', # 'filesystem:create-volume-group', # 'create_volume_group'), - # ('Create software RAID (MD)', - # 'filesystem:create-raid', - # 'create_raid'), + ('Create software RAID (MD)', + 'filesystem:create-raid', + 'create_raid'), # ('Setup hierarchichal storage (bcache)', # 'filesystem:setup-bcache', # 'setup_bcache') @@ -90,11 +97,21 @@ class FilesystemModel(ModelPolicy): 'leave unformatted' ] + # TODO: what is "linear" level? + raid_levels = [ + "0", + "1", + "5", + "6", + "10", + ] + def __init__(self, prober, opts): self.opts = opts self.prober = prober self.info = {} self.devices = {} + self.raid_devices = {} self.storage = {} def reset(self): @@ -142,8 +159,119 @@ class FilesystemModel(ModelPolicy): return self.devices[disk] def get_disks(self): - return [self.get_disk(d) for d in sorted(self.info.keys()) - if len(d) > 0] + possible_devices = list(set(list(self.devices.keys()) + + list(self.info.keys()))) + possible_disks = [self.get_disk(d) for d in sorted(possible_devices)] + return [d for d in possible_disks if d.available] + + def calculate_raid_size(self, raid_level, raid_devices, spare_devices): + ''' + 0: array size is the size of the smallest component partition times + the number of component partitions + 1: array size is the size of the smallest component partition + 5: array size is the size of the smallest component partition times + the number of component partitions munus 1 + 6: array size is the size of the smallest component partition times + the number of component partitions munus 2 + ''' + # https://raid.wiki.kernel.org/ \ + # index.php/RAID_superblock_formats#Total_Size_of_superblock + # Version-1 superblock format on-disk layout: + # Total size of superblock: 256 Bytes plus 2 bytes per device in the + # array + log.debug('calc_raid_size: level={} rd={} sd={}'.format(raid_level, + raid_devices, + spare_devices)) + overhead_bytes = 256 + (2 * (len(raid_devices) + len(spare_devices))) + log.debug('calc_raid_size: overhead_bytes={}'.format(overhead_bytes)) + + # find the smallest device + min_dev_size = min([d.size for d in raid_devices]) + log.debug('calc_raid_size: min_dev_size={}'.format(min_dev_size)) + + if raid_level == 0: + array_size = min_dev_size * len(raid_devices) + elif raid_level == 1: + array_size = min_dev_size + elif raid_level == 5: + array_size = min_dev_size * (len(raid_devices) - 1) + elif raid_level == 10: + array_size = min_dev_size * int((len(raid_devices) / + len(spare_devices))) + total_size = array_size - overhead_bytes + log.debug('calc_raid_size: array_size:{} - overhead:{} = {}'.format( + array_size, overhead_bytes, total_size)) + return total_size + + def add_raid_device(self, raidspec): + # assume raidspec has already been valided in view/controller + log.debug('Attempting to create a raid device') + ''' + raidspec = { + 'devices': ['/dev/sdb 1.819T, HDS5C3020ALA632', + '/dev/sdc 1.819T, 001-9YN164', + '/dev/sdf 1.819T, 001-9YN164', + '/dev/sdg 1.819T, 001-9YN164', + '/dev/sdh 1.819T, HDS5C3020ALA632', + '/dev/sdi 1.819T, 001-9YN164'], + 'raid_level': '0', + 'hot_spares': '0', + 'chunk_size': '4K', + } + ''' + raid_devices = [] + spare_devices = [] + all_devices = [r.split() for r in raidspec.get('devices', [])] + nr_spares = int(raidspec.get('hot_spares')) + + # XXX: curtin requires a partition table on the base devices + # and then one partition of type raid + for (devpath, _, _) in all_devices: + disk = self.get_disk(devpath) + disk.add_partition(1, disk.freespace, None, None, flag='raid') + if len(raid_devices) + nr_spares < len(all_devices): + raid_devices.append(disk) + else: + spare_devices.append(disk) + + # auto increment md number based in registered devices + raid_dev_name = '/dev/md{}'.format(len(self.raid_devices)) + raid_serial = '{}_serial'.format(raid_dev_name) + raid_model = '{}_model'.format(raid_dev_name) + raid_parttype = 'gpt' + raid_level = int(raidspec.get('raid_level')) + raid_size = self.calculate_raid_size(raid_level, raid_devices, + spare_devices) + # create a Raiddev (pass in only the names) + raid_dev = Raiddev(raid_dev_name, raid_serial, raid_model, + raid_parttype, raid_size, + [d.devpath for d in raid_devices], + raid_level, + [d.devpath for d in spare_devices]) + + # add it to the model's info dict + raid_dev_info = { + 'type': 'disk', + 'name': raid_dev_name, + 'size': raid_size, + 'serial': raid_serial, + 'vendor': 'Linux Software RAID', + 'model': raid_model, + 'is_virtual': True, + 'raw': {}, + } + self.info[raid_dev_name] = AttrDict(raid_dev_info) + + # add it to the model's raid devices + self.raid_devices[raid_dev_name] = raid_dev + # add it to the model's devices + self.add_device(raid_dev_name, raid_dev) + + log.debug('Successfully added raid_dev: {}'.format(raid_dev)) + + def add_device(self, devpath, device): + log.debug("adding device: {} = {}".format(devpath, device)) + self.devices[devpath] = device def get_partitions(self): log.debug('probe_storage: get_partitions()') @@ -158,16 +286,23 @@ class FilesystemModel(ModelPolicy): partitions)) return partitions + def installable(self): + ''' one or more disks has used space + and has "/" as a mount + ''' + for disk in self.get_disks(): + if disk.usedspace > 0 and "/" in disk.mounts: + return True + def get_available_disks(self): - return [dev.disk.devpath for dev in self.get_disks() - if self.opts.dry_run is True or dev.mounted is False] + return [dev.disk.devpath for dev in self.get_disks()] def get_used_disks(self): return [dev.disk.devpath for dev in self.devices.values() if dev.available is False] def get_disk_info(self, disk): - return self.info[disk] + return self.info.get(disk, {}) def get_disk_action(self, disk): return self.devices[disk].get_actions() diff --git a/subiquity/models/raid.py b/subiquity/models/raid.py index db54eba4..6763216c 100644 --- a/subiquity/models/raid.py +++ b/subiquity/models/raid.py @@ -14,7 +14,6 @@ # along with this program. If not, see . import logging -from collections import OrderedDict from subiquity.model import ModelPolicy diff --git a/subiquity/ui/views/filesystem.py b/subiquity/ui/views/filesystem.py index 970e9df5..7b84c5a2 100644 --- a/subiquity/ui/views/filesystem.py +++ b/subiquity/ui/views/filesystem.py @@ -380,7 +380,6 @@ class FilesystemView(ViewPolicy): self.signal = signal self.items = [] self.model.probe_storage() # probe before we complete - self.installable = True self.body = [ Padding.center_79(Text("FILE SYSTEM")), Padding.center_79(self._build_partition_list()), @@ -441,7 +440,7 @@ class FilesystemView(ViewPolicy): buttons = [] # don't enable done botton if we can't install - if self.installable: + if self.model.installable: buttons.append( Color.button(done_btn(on_press=self.done), focus_map='button focus')) @@ -467,7 +466,6 @@ class FilesystemView(ViewPolicy): avail_disks = self.model.get_available_disks() if len(avail_disks) == 0: - self.installable = False return Pile([Color.info_minor(Text("No available disks."))]) for dname in avail_disks: diff --git a/subiquity/ui/views/raid.py b/subiquity/ui/views/raid.py index 7ab89d58..711dc5bb 100644 --- a/subiquity/ui/views/raid.py +++ b/subiquity/ui/views/raid.py @@ -13,10 +13,12 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from urwid import Text, Columns, Pile, ListBox +from urwid import Text, Columns, Pile, ListBox, CheckBox +from subiquity.models.filesystem import _humanize_size from subiquity.view import ViewPolicy from subiquity.ui.buttons import cancel_btn, done_btn -from subiquity.ui.interactive import StringEditor, IntegerEditor, Selector +from subiquity.ui.interactive import (StringEditor, IntegerEditor, + Selector) from subiquity.ui.utils import Color, Padding import logging @@ -29,7 +31,8 @@ class RaidView(ViewPolicy): self.signal = signal self.raid_level = Selector(self.model.raid_levels) self.hot_spares = IntegerEditor(caption="") - self.chunk_size = StringEditor(caption="") + self.chunk_size = StringEditor(edit_text="4K", caption="") + self.selected_disks = [] body = [ Padding.center_50(self._build_disk_selection()), Padding.line_break(""), @@ -40,12 +43,32 @@ class RaidView(ViewPolicy): super().__init__(ListBox(body)) def _build_disk_selection(self): + log.debug('raid: _build_disk_selection') items = [ Text("DISK SELECTION") ] + avail_disks = self.model.get_available_disks() + if len(avail_disks) == 0: + self.installable = False + return items.append( + [Color.info_minor(Text("No available disks."))]) + + for dname in avail_disks: + disk = self.model.get_disk_info(dname) + #device = self.model.get_disk(dname) + disk_sz = _humanize_size(disk.size) + disk_string = "{} {}, {}".format(disk.name, + disk_sz, + disk.model) + log.debug('raid: disk_string={}'.format(disk_string)) + self.selected_disks.append(CheckBox(disk_string)) + + items += self.selected_disks + return Pile(items) def _build_raid_configuration(self): + log.debug('raid: _build_raid_config') items = [ Text("RAID CONFIGURATION"), Columns( @@ -80,6 +103,7 @@ class RaidView(ViewPolicy): return Pile(items) def _build_buttons(self): + log.debug('raid: _build_buttons') cancel = cancel_btn(on_press=self.cancel) done = done_btn(on_press=self.done) @@ -90,7 +114,15 @@ class RaidView(ViewPolicy): return Pile(buttons) def done(self, result): - self.signal.emit_signal('filesystem:show') + result = { + 'devices': [x.get_label() for x in self.selected_disks if x.state], + 'raid_level': self.raid_level.value, + 'hot_spares': self.hot_spares.value, + 'chunk_size': self.chunk_size.value, + } + log.debug('raid_done: result = {}'.format(result)) + self.signal.emit_signal('filesystem:add-raid-dev', result) def cancel(self, button): + log.debug('raid: button_cancel') self.signal.emit_signal("quit")