Форум русскоязычного сообщества Ubuntu


Автор Тема: Утилита проверки фрагментированности ФС (btrfs/XFS/EXT2-3-4 b и другие)  (Прочитано 12137 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн viktor ne perestukin

  • Активист
  • *
  • Сообщений: 436
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #15 : 15 Ноябрь 2016, 16:06:45 »
Sly_tom_cat, Здорово. Вот бы нам темным людям поведать Ваше чудо. Что и как запустить без последствий.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27319
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #16 : 15 Ноябрь 2016, 16:33:18 »
я наступил на грабли с файлами, в имени которых есть двоеточие...
Не бывает таких файлов O.O
Двоеточие запрещено на FS и в Линуксе, и в Виндах.

Пользователь добавил сообщение 15 Ноябрь 2016, 16:36:31:
" found" убери.
Раз ты всё равно парсишь лог, убери sort.
« Последнее редактирование: 15 Ноябрь 2016, 16:36:31 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Venom13

  • Активист
  • *
  • Сообщений: 255
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #17 : 15 Ноябрь 2016, 16:42:33 »
Не бывает таких файлов O.O
Двоеточие запрещено на FS и в Линуксе, и в Виндах.

Чего это?



Просто я как-то по привычке старой, не использую это.
« Последнее редактирование: 15 Ноябрь 2016, 16:45:48 от Venom13 »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27319
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #18 : 15 Ноябрь 2016, 16:43:59 »
Нутогдаянезнаю… ???

Пользователь добавил сообщение 15 Ноябрь 2016, 16:45:48:
find . -xdev -maxdepth 1 -type f -size +4k -exec /usr/sbin/filefrag '{}' + | sed -re 's/^(.*): ([0-9]+) .*$/\2 \1/' | sort -nr
« Последнее редактирование: 15 Ноябрь 2016, 16:46:23 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12066
  • Xubuntu 20.04 (64bit)
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #19 : 16 Ноябрь 2016, 01:46:05 »
AnrDaemon, зачем опять так категорично заявлять?
Винда скорее всего не даст двоеточие вставить в имя файла - но в линухе это - разрешено.

Сам прописал скрпит, который снимок экрана пишет через 5 сек после нажатия принтскрина и там добавил в имя время (с двоеточиями) - вот на этих файлах у меня awk -F: и споткнулся.

Пользователь добавил сообщение 16 Ноябрь 2016, 01:59:23:
Вот бы нам темным людям поведать Ваше чудо. Что и как запустить без последствий.
Последствий - не будет - только в темпе файл создаст.
Запустить просто - копируете текст из спойлера в файл с расширением .py (для примера frag_info.py) и даете ему право на исполнение. Его стоит положить куда-то в PATH, но можно и полный путь до него указать. Запускать надо из той директории, которую хочется просканировать (сканируются все вложенные каталоги от текущего, за исключением примонтированных посторонних ФС)

Пользователь добавил сообщение 16 Ноябрь 2016, 01:59:28:
" found" убери.
Раз ты всё равно парсишь лог, убери sort.

Зачем found то убирать? У меня там регэксп на матч всей строки и он не даст никакого сбоя даже если в имени файла будет такой фрагмент "bla-bla: 4 extents found". Регехп даже на таком не споткнется т.к. будет матчить кусок 'extent.* found$' от конца строки.

sort - да в принципе - не нужен, но лог то можно посмотреть и глазами, а там сортировка от большего числа фрагментов - очень даже полезна.
« Последнее редактирование: 16 Ноябрь 2016, 01:59:28 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27319
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #20 : 16 Ноябрь 2016, 03:07:28 »
Зачем found то убирать?
Затем, что твой регэксп споткнётся на20131117-CPYIEQB.mbox: 326 extents found, perfection would be -1 extent
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн viktor ne perestukin

  • Активист
  • *
  • Сообщений: 436
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #21 : 16 Ноябрь 2016, 07:36:25 »
Sly_tom_cat, Весьма спасибо
Запустил, курсор превратился в крестик. Подождал минут 10, не дождался. Остановил. Чето у меня не то.
« Последнее редактирование: 16 Ноябрь 2016, 07:56:02 от viktor ne perestukin »

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12066
  • Xubuntu 20.04 (64bit)
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #22 : 16 Ноябрь 2016, 10:36:10 »
Затем, что твой регэксп споткнётся на
Код: [Выделить]
20131117-CPYIEQB.mbox: 326 extents found, perfection would be -1 extent
Я таких выводов еще ни разу не получал от от filefrag -а  :idiot2:
У меня почему-то всегда по такой схеме:
<файл>: <число сегментов> extent(s) found

Пользователь добавил сообщение 16 Ноябрь 2016, 10:46:39:
viktor ne perestukin, про крестик  :idiot2: не скажу - не наблюдал такого.... не должно бы... похоже что-то неправильно сделали...

По поводу времени - у меня на формирования вывода из примера (с числом файлов в хомяке порядка 56 тысяч) уходит меньше 10 секунд, но, понятно, что это может зависеть от производительности машины и диска. Пробуйте для эксперемента на небольшом каталоге.
« Последнее редактирование: 16 Ноябрь 2016, 10:46:39 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн eNdiD

  • Участник
  • *
  • Сообщений: 188
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #23 : 16 Ноябрь 2016, 11:14:29 »
Sly_tom_cat,
А это нормально, что фактор по фрагментам имеет такое значение? Вы писали как он считается, но интуитивно не могу понять, что эти проценты означают.
Total: 4940 files (4919 not empty) and 69335 fragments
Totally 64416 fragments in 669 fragmented files
Fragmentation factor by files {fragmented/total}: 13.54%
Fragmentation factor by fragments {(total_fragments - total)/total}: 1309.53%

   2   fragments: 26%
 3-10  fragments: 36%
11-100 fragments: 15%
 > 101 fragments: 20%

К слову, лучше уж писать в саммари > 100 fragments :) А то есть диапазон 11-100, есть 102 - inf. А куда 101 делось?
« Последнее редактирование: 16 Ноябрь 2016, 11:20:59 от eNdiD »

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12066
  • Xubuntu 20.04 (64bit)
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #24 : 16 Ноябрь 2016, 11:38:16 »
eNdiD, там же формулы написаны смысл фактора фрагментации по фрагментам в том, на сколько лишних фрагментов больше по отношению к числу оптимального количества (т.е. числу файлов).

Интуитивно можно посмотреть на соотношение не пустых файлов и общее число фрагментов. В некоторых утилитах так и пишут: Actual: 40 Optimal: 20 - т.е. понятно что фрагментов в два раза больше чем в идеале.

Но в принципе можно как-то по другому посчитать... предлагайте - сделаю.

За замечания - спасибо - поправлю.

А вообще у вас картина конечно печальная... если не ssd, то я бы посоветовал дефрагментировать.
« Последнее редактирование: 16 Ноябрь 2016, 11:47:51 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн eNdiD

  • Участник
  • *
  • Сообщений: 188
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #25 : 16 Ноябрь 2016, 12:32:12 »
Sly_tom_cat, с вашего позволения, немного переделал.

#!/usr/bin/env python3
 
import subprocess, os, re, sys
 
try:
  path = sys.argv[1]
except IndexError:
  path = os.getcwd()

subprocess.call([r"find {path} -xdev -type f -exec filefrag '{{}}' +  | sed -e 's/^\(.*\): \(.*\) extent.* found$/\2 \1/' | sort -nr > /tmp/frag.log".format(path=path)],
                shell=True)
print(path)
total = 0
totalf = 0
fragmented = 0
frags = 0
cnt = [0, 0, 0, 0]
with open('/tmp/frag.log', 'rt', newline='\n') as f:
  for line in f:
    totalf += 1
    fr, fn = re.findall(r'(\d+) (.*)', line)[0]
    fr = int(fr)
    if fr > 0:
      total += 1
      frags += fr
      if fr > 1:
        fragmented += 1
        if fr == 2:
          cnt[0] += 1;
        elif fr <= 10:
          cnt[1] += 1;
        elif fr <= 100:
          cnt[2] += 1;
        else:
          cnt[3] += 1;
if fragmented:
  cnt = [c/fragmented*100 for c in cnt]
exfrags = frags - total
tot =  'Total: %d files (%d not empty) and %d fragments\n' % (totalf, total, frags)
tot += ('Totally %d fragments in %d fragmented files\n' % (exfrags, fragmented) if fragmented else '')
tot += 'Fragmentation factor by files {fragmented/total}: %0.2f%%\n' % (fragmented / totalf * 100)
tot += 'Fragmentation factor by fragments {(total_fragments - total)/total}: %0.2f%%\n' % (exfrags / total * 100)
tot += ('\n   2   fragments: %d%%\n 3-10  fragments: %d%%\n11-100 fragments: %d%%\n > 100 fragments: %d%%'
        % (cnt[0], cnt[1], cnt[2], cnt[3]) if fragmented else '')
print(tot)

А в /usr/local/bin создал файл btrfs.frag:

#!/bin/bash
exec python3 /путь/скрипт.py $1

Теперь можно вызывать проверку из терминала, не таская за собой скрипт по папкам
btrfs.frag /путь
Если вызвать не указывая путь - будет браться текущий каталог в терминале. Я думал, будет браться директория со скриптом, но получилось даже лучше.

P.S. А картина, да. Печальная. И это с ключем autodefrag.

UPD. Немного изменил, чтобы выводил путь правильно, если передан отличный от текущего каталога.
UPD2. Все сломал, пока редактировал пост. Поправил.
« Последнее редактирование: 16 Ноябрь 2016, 12:54:42 от eNdiD »

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12066
  • Xubuntu 20.04 (64bit)
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #26 : 16 Ноябрь 2016, 14:07:32 »
eNdiD, я тоже подпиливаю немного. И как не странно - именно в том же русле - что бы можно было каталог как параметр передать.
вот мой вариант:
Код: Python
  1. #!/usr/bin/env python3
  2.  
  3. import sys, subprocess, os, re
  4.  
  5. if len(sys.argv) > 1:
  6.   wd = sys.argv[1]
  7.   if not os.path.exists(wd):
  8.     print ('Usage: frag_info.py [path_to_scan]\n'
  9.            'When path_to_scan is not specified then it scans from current directory')
  10.     quit()
  11. else:
  12.   wd = os.getcwd()
  13. print('Fragmentation within %s\n' % wd)
  14.  
  15. cmd = ("find %s -xdev -type f -exec filefrag '{}' +  | " % wd +
  16.        r"sed -e 's/^\(.*\): \(.*\) extent.* found$/\2 \1/' | "
  17.        "sort -nr > /tmp/frag.log")
  18. subprocess.call([cmd], shell=True)
  19.  
  20. total = totalf = fragmented = frags = 0
  21. cnt = [0, 0, 0, 0]
  22.  
  23. with open('/tmp/frag.log', 'rt', newline='\n') as f:
  24.   for line in f:
  25.     totalf += 1
  26.     fr, fn = re.findall(r'(\d+) (.*)', line)[0]
  27.     fr = int(fr)
  28.     if fr > 0:
  29.       total += 1
  30.       frags += fr
  31.       if fr > 1:
  32.         fragmented += 1
  33.         if fr == 2:
  34.           cnt[0] += 1;
  35.         elif fr <= 10:
  36.           cnt[1] += 1;
  37.         elif fr <= 100:
  38.           cnt[2] += 1;
  39.         else:
  40.           cnt[3] += 1;
  41.  
  42. if fragmented:
  43.   cnt = [c/fragmented*100 for c in cnt]
  44. exfrags = frags - total
  45. tot =  'Totally: %d files (%d not empty) stored within %d fragments\n' % (totalf, total, frags)
  46. tot += ('Totally %d fragments in %d fragmented files\n' % (exfrags, fragmented) if fragmented else '')
  47. tot += 'Fragmentation factor by files {fragmented/total in %%}: %0.2f%%\n' % (fragmented / totalf * 100)
  48. tot += 'Fragmentation factor by fragments {(fragments - files)/ files}: %0.3f\n' % (exfrags / total)
  49. tot += '\nFragments per files:\n'
  50. tot += ('   2   fragments: %d%%\n 3-10  fragments: %d%%\n11-100 fragments: %d%%\n > 100 fragments: %d%%'
  51.         % (cnt[0], cnt[1], cnt[2], cnt[3]) if fragmented else '')
  52. tot += '\n\nSee detailed log in /tmp/frag.log'
  53. print(tot)
  54.  

В принципе в /usr/local/bin можно сам скрипт положить и сделать его исполняемым (хешбанг в первой строчке подтянет вызов интерпретатора). Но назвал бы я его как-то типа frag_info - ибо эта утилита на любой ФС может работать, а не только на btrfs.

А таскать скрипт по каталогам и не надо было - просто надо к нему полный путь указать.
« Последнее редактирование: 16 Ноябрь 2016, 14:23:51 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн viktor ne perestukin

  • Активист
  • *
  • Сообщений: 436
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #27 : 16 Ноябрь 2016, 14:20:15 »
eNdiD, А Ваш скрипт у меня работает.

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12066
  • Xubuntu 20.04 (64bit)
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #28 : 16 Ноябрь 2016, 14:25:19 »
viktor ne perestukin, мой попробуй тоже - они, в принципе, не отличаются особо. Должны оба работать.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн theurs

  • Активист
  • *
  • Сообщений: 461
    • Просмотр профиля
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #29 : 16 Ноябрь 2016, 14:28:47 »
P.S. А картина, да. Печальная. И это с ключем autodefrag.
А что там за файлы такие

 

Страница сгенерирована за 0.161 секунд. Запросов: 24.