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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

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

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

Оффлайн viktor ne perestukin

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

Оффлайн AnrDaemon

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

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

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

Оффлайн Venom13

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

Чего это?



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

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28360
    • Просмотр профиля
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!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #19 : 16 Ноября 2016, 01:46:05 »
AnrDaemon, зачем опять так категорично заявлять?
Windows скорее всего не даст двоеточие вставить в имя файла - но в линухе это - разрешено.

Сам прописал скрпит, который снимок экрана пишет через 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 - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28360
    • Просмотр профиля
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

  • Активист
  • *
  • Сообщений: 465
    • Просмотр профиля
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!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
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 - грузимся без загрузчика: https://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!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
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 - грузимся без загрузчика: https://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!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Re: BTRFS. Готова ли к использованию в 16.04?
« Ответ #26 : 16 Ноября 2016, 14:07:32 »
eNdiD, я тоже подпиливаю немного. И как не странно - именно в том же русле - что бы можно было каталог как параметр передать.
вот мой вариант:
Код: (python) [Выделить]
#!/usr/bin/env python3

import sys, subprocess, os, re

if len(sys.argv) > 1:
  wd = sys.argv[1]
  if not os.path.exists(wd):
    print ('Usage: frag_info.py [path_to_scan]\n'
           'When path_to_scan is not specified then it scans from current directory')
    quit()
else:
  wd = os.getcwd()
print('Fragmentation within %s\n' % wd)

cmd = ("find %s -xdev -type f -exec filefrag '{}' +  | " % wd +
       r"sed -e 's/^\(.*\): \(.*\) extent.* found$/\2 \1/' | "
       "sort -nr > /tmp/frag.log")
subprocess.call([cmd], shell=True)

total = totalf = fragmented = 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 =  'Totally: %d files (%d not empty) stored within %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 in %%}: %0.2f%%\n' % (fragmented / totalf * 100)
tot += 'Fragmentation factor by fragments {(fragments - files)/ files}: %0.3f\n' % (exfrags / total)
tot += '\nFragments per files:\n'
tot += ('   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 '')
tot += '\n\nSee detailed log in /tmp/frag.log'
print(tot)

В принципе в /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 - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн viktor ne perestukin

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

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
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 - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн theurs

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

 

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