algri14⇓ пишет:мне кажется что-то там с python связано
По следам Карабаира...
gdiskdump не отображал диски по причине того, что заточен под fdisk из util-linux v2.21.x, в то время как сейчас используется fdisk из util-linux v2.28.2. Вот кусок "парсера" из скрипта /usr/share/gdiskdump/gdiskdump.py, который выуживает диски и разделы с помощью fdisk -l:
▼Spoiler
Диски:
def get_hd_liststore(self):
liststore=self.builder.get_object("hd_liststore")
process = subprocess.Popen(['fdisk','-l'],stdout=subprocess.PIPE,shell=False)
outstr,err=process.communicate()
pix=gtk.gdk.pixbuf_new_from_file(getdatapath() +'/media/drive-harddisk.svg')
devlist=outstr.splitlines()
for i in range(len(devlist)):
if len(devlist[i].split(', ')) == 2 and len(devlist[i].split()) <= 7 and devlist[i].split()[1].startswith('/dev/'):
hdinfo=devlist[i].split()
hd=hdinfo[1].rstrip(':')
blocks=0
#language support
if hdinfo[4].strip(' ').isdigit():
size=hdinfo[4].replace(' ','')
else:
size=hdinfo[5].replace(' ','')
convsize=self.convert_bytes(size)
rowiter=liststore.append()
liststore.set(rowiter,0,pix,1,hd,2,blocks,3,size,4,convsize)
print 'got hd list'
Разделы:
def get_partition_liststore(self):
liststore=self.builder.get_object("partition_liststore")
process = subprocess.Popen(['fdisk', '-l'],stdout=subprocess.PIPE,shell=False)
outstr,err=process.communicate()
pix=gtk.gdk.pixbuf_new_from_file(getdatapath() +'/media/drive-harddisk.svg')
devlist=outstr.splitlines()
for i in range(len(devlist)):
if devlist[i].startswith(('/dev/')):
row=devlist[i].replace('*','')
partinfo=row.split(None,5)
part=partinfo[0]
blocksstr=partinfo[3].strip(' ')
sizeadd=blocksstr.endswith('+')
blocks=blocksstr.strip('+')
size=(int(blocks) * 1024)
if sizeadd:
size=size+512
convsize=self.convert_bytes(size)
system=partinfo[5]
rowiter=liststore.append()
liststore.set(rowiter,0,pix,1,part,2,blocksstr,3,size,4,convsize,5,system)
print 'got partition list'
Поскольку разбираться в питоновских каракулях (да и в любых чужих - то же) - дело неблагодарное, решил найти версию fdisk, которая бы подсунула в дедушкин парсер нужный вывод. Оказалось, что нужная версия fdisk находится ажно в Mageia-2. Поскольку работа программы крутится вокруг двух утилит, то сразу взял оттуда fdisk и dd, перетащил их в рабочую папку программы /usr/share/gdiskdump и прописал в коде /usr/share/gdiskdump/gdiskdump.py абсолютные пути к ним.
Теперь диски отображаются, а индикатор клонирования dd "отталкивается" от нужных флагов (надеюсь), ибо показывает какой-то процесс. Проверил на флешке с BTRFS - вроде клонирует.
algri14, нужно бы проверить это добро, если у Вас будут свободные время и флешки.
Ссылка на пакеты v0.9 там же: https://cloud.mail.ru/public/MUy3/ZLoNgvNR6
p.s. Надо мне будет у AlexL спросить, можно ли так изгаляться в линуксе (видимо нельзя). Опять небось скажет, что лабуду слепил. Ну и ладно. Интересно же поковырять.