Домен даних: Як перелічити файли у файловій системі домену даних за допомогою sfs-dump
Summary: У цій статті пояснюється використання інтерфейсу командного рядка домену даних (CLI) для дампу файлів і каталогів для окремих MTrees або для файлової системи (FS) загалом.
Symptoms
Незалежно від протоколу, Data Domain FS містить лише файли (у каталогах), організовані у MTrees. Усі файли (як для файлів у Active, так і в будь-яких хмарних блоках) мають однаковий корінь і простір назв; існує єдиний простір назв, що означає, що файли та каталоги містять файли в Active та cloud units без жодних відмінностей.
Отримання детального файлового дампу може бути корисним з таких причин, як:
-
Порівнюючи зі списком файлів, керованих резервним додатком, щоб перевірити, чи є файли, що залишилися сиротою з цього резервного додатку.
-
Перелік усіх файлів понад певний віковий поріг, щоб визначити, чи правильно додаток для резервного копіювання забезпечує збереження резервних копій
Cause
Інструмент CLI для створення списків файлів — це sfs_dump.
Resolution
Використовуйте SSH Session Log для збору вихідного списку. Точна команда для запуску з DD CLI для збору списків файлів залежить від версії Data Domain Operating System (DDOS), що використовується.
Швидкі посилання
- Створити список для DDOS-релізів до 7.13.0.0, 7.10.1.15, 7.7.5.25 та 6.2.1.110
- Створити список для DDOS-релізів 7.13.0.0, 7.10.1.15, 7.7.5.25 та 6.2.1.110 або новіших
- Створити список для DDOS-релізів 8.1.0.0, 7.13.1.10, 7.10.1.30 та 7.7.5.40 або новіших
- Конвертуйте список у CSV-файл
- Імпорт sfs_dump виведення у форматі CSV у таблицю
Отримати детальний перелік файлів у домені даних із CLI, а згодом і процес отримання інтелекту для файлів, що зберігаються в домені даних, залежить від запуску DDOS-релізу.
Після збору текстового вихідного файлу з деталями файлу обробка виводу у більш зручну форму завжди залишається однаковою, оскільки формат виводу для всіх DDOS-релізів однаковий (або може бути конвертований у спільний формат за допомогою скрипту).
SSH-журнал сесій:
Спільним для всіх релізів DDOS є вимога входити в домен даних як адміністратор, і робити це через SSH-клієнт, який підтримує логування результатів консолі у текстовий файл на стороні клієнта (PuTTY добре працює для цього). Налаштуйте SSH-клієнт так, щоб він записував вихідні дані у текстовий файл на клієнті (забезпечуючи відсутність обмежень у кількості зареєстрованих рядків або довжині окремого рядка). SSH-файл журналу сесії (а отже, й списки файлів DD) не записується на домені даних, а на (зазвичай) десктопному клієнті, з якого ініціюється SSH-з'єднання.
Під час збору вихідної сесії SSH переконайтеся, що файлу має значення ім'я (наприклад, додайте ім'я хоста домену даних і ім'я MTree для дампу), а також переконайтеся, що достатньо місця для файлу журналу, який може становити приблизно 200 МБ для доменів даних із 1 мільйоном файлів.
DDOS-релізи до 7.13.0.0, 7.10.1.15, 7.7.5.25 та 6.2.1.110:
Ці релізи досі підтримують se sfs_dump командування (та -c опція виводити деталі файлу безпосередньо у форматі CSV без додаткової обробки), хоча переход у режим інженера підтримки (SE) не рекомендується з міркувань безпеки, натомість варто оновити до останньої доступної версії DDOS.
Увійдіть у Домен даних як адміністратор, з SSH-клієнтом, налаштованим на запис вихідних даних на диск, перейдіть у режим привілеїв SE, а потім виконайте таку команду для кожного MTree, що вимагає даних файлу для:
#### To produce the output directly as CSV # se sfs_dump -c <mtree-path> #### To produce the output as default format # se sfs_dump <mtree-path>
Command у цих версіях також може одночасно створювати перелік усіх файлів у FS (замість одного MTree одночасно). Щоб скинути інформацію про файли для всіх файлів у FS, залиште шлях MTree позаду:
# se sfs_dump -c
Після завершення припиніть логування SSH-клієнта на диск і відкладіть файли для подальшої обробки.
Формат для командного виводу — це один рядок для кожного файлу. Якщо не користуєшся -c, формат ідентичний тому, що показано вище для наступних релізів. У випадках, коли -c використовувався (для CSV-виходу), формат виглядає ось так (включно з заголовком, що показано як перший рядок у вихідному повітрі):
name mtime fileid size seg_bytes seg_count redun_seg_count pre_lc_size post_lc_size /data/col1/backup/file 1656995350000000000 78 33554431 33668007 4016 0 33668007 34208564
DDOS випускає версії 7.13.0.0, 7.10.1.15, 7.7.5.25 та 6.2.1.110 або новіші:
MTree, який буде зазначений, слідує за ключовим словом «MTree»:
# filesys sfs-dump mtree <mtree-path>
filesys sfs_dum командування, порівняно з se sfs_dump:
- Нова команда не підтримує
-cопція скидання інформації про файл у форматі CSV (стовпець) - Нова команда може запускати лише MTree одночасно, немає підтримки запуску проти всього FS в одному виклику
Якщо потрібно передати всі деталі файлу MTrees у файл, ітераційно пройдіть увесь список MTrees у Data Domain FS і виконайте команду один раз для кожного з них. Користувач може отримати список MTrees у системі, запускаючи:
# mtree list
Увійдіть у домен даних як адміністратор, з SSH-клієнтом, налаштованим для запису вихідних даних на диск, і виконайте таку команду для кожного MTree, що вимагає дані файлу для:
# filesys sfs-dump mtree <mtree-path>
Якщо потрібні деталі файлу для кількох MTree, виберіть опцію для виконання всіх дампів у один і той же вихідний файл або переключіть конфігурацію SSH-клієнта на інший файл перед запуском команди для кожного з MTree.
Альтернативно, зберіть вихідні дані без нагляду, виконавши команду за допомогою SSH:
#### Releases 7.13.0.0, 7.10.1.15, 7.7.5.25 and 6.2.1.110 onwards only # ssh sysadmin@DD-HOSTNAME "filesys sfs-dump mtree /data/col1/backup" > sfs-dump-DD-backup.txt
У будь-якому випадку вихідна інформація має один рядок для кожного файлу у такому форматі:
/data/col1/backup/file: mtime: 1580211658000000000 fileid: 175 size: 136794 type: 9 seg_bytes: 138282 seg_count: 18 redun_seg_count: 14 (78%) pre_lc_size: 15045 post_lc_size: 8760 (58%) mode: 02000100644 start_offset: 0 end_offset: 18446744073709551615
DDOS випускає версії 8.1.0.0, 7.13.1.10, 7.10.1.30 та 7.7.5.40 або пізніше:
filesys fs-dump:
- Можливість додати
-cтому вихід друкується у форматі CSV-подібної форми (поля розділені стовпцями) - Можливість запустити інформацію про дамп файлів для всіх файлів у FS одночасно
- Використовуйте журнал сесії SSH для збору результату.
Command залишається таким самим, як і в попередніх версіях, з урахуванням згаданих покращень, підсумованих нижче:
#### File listing for all the files in a given MTree path # filesys sfs-dump mtree <mtree-path> #### File listing for all the files in a given MTree path, with CSV-like output # filesys sfs-dump -c mtree <mtree-path> #### File listing for all the files in the FS # filesys sfs-dump #### File listing for all the files in the FS, with CSV-like output # filesys sfs-dump -c
Ця команда залишається «прихованою», тому вона не з'являється в інтерактивній довідці CLI чи в документації.
Як обробляти sfs_dump або fileys sfs-dump дані у щось корисне:
Формат окремих файлів, які відображаються у вихідному процесі при використанні filesys sfs-dump або sfs_dump без -c Опцію можна підсумувати так:
/data/col1/backup/file: mtime: 1580211658000000000 fileid: 175 size: 136794 type: 9 seg_bytes: 138282 seg_count: 18 redun_seg_count: 14 (78%) pre_lc_size: 15045 post_lc_size: 8760 (58%) mode: 02000100644 start_offset: 0 end_offset: 18446744073709551615 Field 01 : filename with full path (/data/col1/backup/file) Field 03 : file last modification time as UNIX epoch in nanoseconds (nanoseconds since January 1st 1970 at midnight) Field 05 : file (inode) ID, inode numbers are per MTree (175) Field 07 : pre-comp size for the file in bytes (136794) Field 09 : type of file (9) Field 11 : segment store bytes (this is NOT the file size), please ignore (138282) Field 13 : segment count, or the number of segments the file consists of (18) Field 15 : number of file segments which are redundant, or not unique (14) Field 16 : percentage of non-unique segments to total segments (78%) Field 18 : combined size of the file's unique segments after deduplication (15045) Field 20 : combined size of the file's unique segments after deduplication and local compression (8760) Field 21 : ratio of post-deduplicated + post-compressed unique segments size to post-deduplicated unique segment size (58%), shows how well local compression worked Field 23 : file mode, please ignore
У наведеному вище прикладі оригінал має розмір 136 794 байти, які після проходження через конвеєр введення файлу домену даних FS розраховуються як використання 15 045 байт після дедуплікації та 8760 байт, коли унікальні сегменти файлу стискаються перед записом на диск. Отже:
- Дедуплікація файлу (також відома як "
gcomp" або глобальне стиснення) — це коефіцієнт x9.09 (від 136 794 до 15 045 байт) - Локальне стиснення файлу (також відоме як «l»
comp" для локального стиснення) має коефіцієнт x1.72 (від 15 045 до 8760 байт) - Оцінене загальне зменшення розміру файлу (відоме як «коефіцієнт стиснення») становить коефіцієнт x15,62 (136 794–8760 байт)
Альтернативно, sfs_dump -c Вихід схожий, але більш лаконічний:
/data/col1/backup/file 1656995350000000000 78 33554431 33668007 4016 0 33668007 34208564 Field 01 : filename with full path (/data/col1/backup/file) Field 02 : file last modification time as UNIX epoch in nanoseconds (nanoseconds since January 1st 1970 at midnight) Field 03 : file (inode) ID, inode numbers are per MTree Field 04 : pre-comp size for the file in bytes (33554431) Filed 05 : segment store bytes (this is NOT the file size), please ignore (33668007) Field 06 : segment count, or the number of segments the file consists of (4016) Field 07 : number of file segments which are redundant, or not unique (0) Field 08 : combined size of the file's unique segments after deduplication (33668007) Field 09 : combined size of the file's unique segments after deduplication and local compression (34208564)
У цьому прикладі можна зробити ті ж розрахунки, що й у попередній:
- Дедуплікація файлу (також відома як "
gcomp" або глобальне стиснення) — це коефіцієнт x0,99 (від 33 554 431 до 33 668 007 байт) - Локальне стиснення файлу (також відоме як "
lcomp," для локального стиснення) має множник x0,98 (33 668 007 до 34 208 564 байт) - Оцінене загальне зменшення розміру файлу (відоме як «коефіцієнт стиснення») становить множник x0,98 (33 554 431 до 34 208 564 байт)
Порівняно з файлом, показаним для No -c Наприклад, цей пристрій не досягає дедуплікації (немає резервних сегментів) і не досягає локального стиснення. Це означає, що файл є стисненим.
post_lc_size є певною величиною не означає, що об'єм на диску, який використовується цим файлом, ідентичний цій кількості, оскільки існує багато накладних витрат на рівні FS, які не враховуються на рівні кожного файлу. Обмеження такі ж, як і для вже відомих для цієї команди:
mtree show compressionВикористання інформації з наведених вище вихідних файлів полягає у обробці числових даних у спосіб, який відповідає цілям користувача. Декілька прикладів випадків використання можуть бути:
- Визначення
gcompтаlcompдля файлів, що відповідають певному шляху (якщо шлях можна співставити з певним сервером резервного копіювання, клієнтом, політикою, завданням тощо) - Обчислення, скільки даних (
pre-comp) зберігається у певному місці, яке старше за певний період часу (для виявлення сиріт або усунення проблем із застосуванням резервного копіювання, яке не закінчує термін дії резервних копій) - Будь-яка інша характеристика може бути корисною
sfs_dump -c У більш пізніших релізах ми рекомендуємо конвертувати вихідні дані у формат CSV, зазначений вище, а потім використовувати файл у форматі CSV для подальшої обробки, однак залежно від ваших навичок, не-CSV-вихід можна обробляти безпосередньо.
Конвертація у CSV:
Для конвертації не-CSV sfs_dump вихід у такий, який ідентичний тому, що sfs_dump -c би надрукував, можна використовувати наступний командний рядок Linux:
# cat sfs-dump-noCSV.txt | grep ^/ | awk '
BEGIN {print "name\tmtime\tfileid\tsize\tseg_bytes\tseg_count\tredun_seg_count\tpre_lc_size\tpost_lc_size"}
{
colon_index = index($0, ":")
filename = substr($0, 1, colon_index - 1)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", filename)
n = split(substr($0, colon_index + 1), fields, " ")
print filename "\t" fields[2] "\t" fields[4] "\t" fields[6] "\t" fields[10] "\t" fields[12] "\t" fields[14] "\t" fields[17] "\t" fields[19]
}' > sfs-dump-CSV.csv
Все, що далі, надається користувачам як є. З боку Dell немає жодних гарантій чи зобов'язань щодо інструкцій, наведених нижче. Отримання інтелекту з деталей списку файлів — це завдання користувача, і як це досягти, повністю залежить від набору інструментів для добування даних у виході файлового дампу, мети та власної експертизи користувача в обробці даних із командного виходу, описаного вище. Один користувач може обрати обробку текстових файлів через командний рядок Linux для скидання деяких агрегатів, інші — для створення вхідних даних для значень графіків за допомогою «gnuplot», тоді як більшість користувачів, як вважають, шукають простіший (але обмежений) підхід — створити таблицю з CSV-файлу для аналізу.
Dell доклала зусиль, щоб інструкції нижче були коректними, робочими та корисними для користувачів, але не можуть гарантувати їх роботу, і підтримка не надається, оскільки вони знаходяться поза межами сфери підтримки.
Імпорт sfs_dump виведення у форматі CSV у таблицю (приклад для Excel):
Коли CSV-версія списку деталей файлу стане доступною, одним із способів отримати інтелект з даних є завантаження даних у програмне забезпечення для електронних таблиць. Як приклад використовується Microsoft Excel, хоча інструкції мають бути схожими для інших програм. Щоб імпортувати текстовий файл CSV у Excel у форматі CSV, виконайте наступні кроки:
- Відкрийте Excel і створіть нову порожню таблицю
- Перейдіть у меню Data у верхній частині, потім натисніть іконку з назвою From Text/CSV
- Використовуйте діалог, щоб знайти дані файлу у форматі CSV (
sfs-dump-CSV.csvяк у прикладі скрипта конвертації з формату без CSV), виберіть його і натисніть Імпорт - Якщо формат вхідного файлу правильний і Excel може намалювати формат з перших 200 рядків (що і має бути), діалогу має показати попередній перегляд таблиці, яку потрібно згенерувати. Перегляньте інформацію, щоб переконатися, що вона виглядає добре, зокрема, що перший рядок виявляється як заголовки
- Якщо з попереднім переглядом все виглядає добре, натисніть кнопку «Завантаження » внизу діалогу, і нова таблиця буде представлена з гарним форматуванням, а заголовки полів перетворені на ті, що підтримують пошук і фільтри.
Дані в таблиці вже корисні, наприклад, застосування числового фільтра до числових полів, таких як розмір (щоб показувати лише файли вище заданого розміру), або застосування текстового фільтра до поля імені, щоб відображалися лише файли з файлів домену даних, що відповідають заданому шаблону (лише ті, що починаються з шляху для певного MTree), і робити інші похідні обчислення на основі цих даних.
Правильно імпортована таблиця Excel повинна містити дані у стовпцях від A-I. Якщо дані присутні лише в стовпці A, але простягаються по всьому екрану, закрийте Excel і повторіть кроки з 1 по 5 вище.
Додайте додаткові обчислені поля:
Таблицю можна розширити стільки обчислених полів, скільки потрібно користувачу. Цікаве поле для додавання — це читабельна дата і час, що відповідають mtime файлу (зазвичай час останньої зміни — це час, коли файл був записаний у DD). Також може бути корисно обчислювати та показувати значення стиснення для кожного файлу залежно від того, для чого використовуються дані. Нові стовпці автоматично заповнюються за допомогою формул Excel, описаних нижче.
Конвертація часової мітки:
Щоб конвертувати позначку часу на UNIX-подібний у читабельну людиною дату і час:
- Клацніть правою кнопкою миші по клітинці J2 і виберіть «Форматувати клітинки»
- У списку «Категорія» ліворуч виберіть «Custom».
- Якщо ще немає, створіть формат для читання людиною формату дати-часу (у прикладі є рядок EST у кінці). Його можна замінити на ваше текстове визначення часового пояса або повністю прибрати «EST», якщо вас не цікавить): yyyy-mm-dd hh:mm:ss «EST»
- Натисніть «ОК», коли готово. Тепер у клітині J2 є власний формат даних.
- Додайте таку формулу до комірки J2. У формулі замініть (-6*3600) на правильну різницю часових поясів, що відповідає UTC для налаштованого часового поясу в домені даних на момент отримання даних "sfs-dump". Наприклад, східний час США влітку відстає від UTC на 6 годин, звідси тут «-6».
(((B2/1000000000+(-6*3600))/86400)+25569) (((B2/1000000000)/86400)+25569)
- Вставте формулу в клітинку J2, а також у кожну клітинку решти рядків таблиці
- Обчисліть формулу для всієї таблиці та покажіть значення дати та часу у налаштованому форматі
- Гарно відформатуйте стовпець як існуючі, а заголовок налаштований як Дата з можливістю застосування фільтрів дат, єдине, що можна зробити — це встановити власну назву для стовпця (Дата).
Інформація про стиснення:
Стовпці можна додати для інформації про стиснення кожного файлу, як пояснено вище. Цього разу формули відображаються, включаючи "=", тому потрібно скопіювати весь текст і вставити спеціальний як текст:
- Скопіюйте наступну формулу та вставте спеціальний файл як текст у клітинку K2, щоб створити стовпець для дедуплікації кожного файлу, або
gcomp:=IF(H2=0,0,D2/H2)
- Скопіюйте наступну формулу та вставте спеціальний текст у комірку L2, щоб створити стовпець для локального стиснення кожного файлу, або
lcomp:=IF(I2=0,0,H2/I2)
- Скопіюйте наступну формулу та вставте спеціальний текст у комірку M2, щоб створити стовпець для загального коефіцієнта стиснення файлу для кожного файлу:
=K2*L2
Дайте новим колонкам належну назву. Якщо ви хочете, щоб формат значень стиснення був іншим (наприклад, щоб обмежити кількість десяткових), зробіть, як у прикладі для дати і часу, і заздалегідь встановіть цифровий формат комірки перед вставкою формули
.Пам'ятайте про безпеку своєї роботи, заходячи в меню Файл і діючи. Зберігайте як переконатися, що тип збереженого файлу встановлений як Excel Workbook (*.xlsx), щоб зберігати форматування та фільтрацію.
Після виконання описаних дій ваша таблиця містить такі (релевантні) стовпці:
- A містить ім'я файлу
- B містить дату (у UNIX-епоху в наносекундах) для моменту останнього запису файлу
- D — оригінальний розмір файлу
- H — це розмір після глобального стиснення
- I — це розмір після глобального та локального стиснення
- J містить дату останнього запису файлу у форматі, зрозумілому для людини
- K містить глобальне стиснення (дедуплікацію) для файлу
- L містить локальне стиснення файлу
- M містить повне стиснення файлу
Усі розміри файлів вказані в байтах.
Тепер Excel може фільтрувати або сортувати за потреби звітувати про дані.
- Наприклад, показувати лише файли в MTree /data/col1/backup, яким понад 30 днів:
- Натисніть стрілку вниз у заголовку «Ім'я», виберіть «Текстові фільтри», потім «Починаємо» і введіть
/data/col1/backup/у коробку. Задній слеш важливий. Натисніть OK - Натисніть стрілку вниз у заголовку «Остання написана дата», виберіть «Фільтри дат», а потім «До». Використайте вибір дати праворуч у діалогу, щоб вибрати дату 30 днів тому. Натисніть OK.
Additional Information
Команда для скидання розташування файлу (активний і хмарний)
Існує спосіб скинути список файлів із вказівкою, які знаходяться в режимі Активний, а який у будь-яких хмарних блоках, а саме:
#### For the DD FS as a whole # filesys report generate file-location #### For an individual MTree or subdirectory # filesys report generate file-location path /data/col1/test
Вихід у будь-якому випадку має такий тип:
------------------------- ---------------------- ---------------------- --------------------------- File Name Location(Unit Name) Size Placement Time ------------------------- ---------------------- ---------------------- --------------------------- /data/col1/test/file1.bin Cloud-Unit 200.00 GiB Sat Mar 5 13:24:10 2022 /data/col1/test/file2.bin Active 10.00 TiB Sat May 14 00:48:17 2022 ------------------------- ---------------------- ---------------------- ---------------------------
Однак наведена вище команда зазвичай недостатня для більшості намірів, оскільки, наприклад, розмір вказаний у читабельних одиницях (а не в байтах чи МіБ чи будь-якому множнику набору), а час розміщення збігається з часом, коли резервне копіювання було зроблено в домені даних для файлів у Активному режимі, але для файлів у хмарі — ні. («Час розміщення» для файлів у хмарі — це дата і час, коли файл був переміщений у хмарний блок
).Також майте на увазі, що наведена нижче команда (і скрипт, що конвертує з не-CSV) sfs_dump) виводить дані у стовпці, розділені вкладками. Символи вкладки, присутні у вихідному матеріалі, мають зберігатися у файлі логування, інакше кроки, описані вище для імпорту CSV у Excel, не можуть правильно розділити поля.
sfs_dump -c
Інструкції, які надаються, передбачають розумне знання Excel, але можуть бути перекладені в інше програмне забезпечення для електронних таблиць.
Сучасні версії Excel дозволяють багато рядків, але майте на увазі, що кожен файл на sfs_dump Вихід для обробки — це один рядок, тому Excel повинен швидко обробляти та оновлювати таблицю з такою ж кількістю рядків, скільки файлів у вашому наборі даних. Жорсткий ліміт трохи перевищує 1 мільйон рядків, але навіть при кількості файлів значно менший за цей обсяг Excel може бути не підходящим для завдання (занадто повільний).
Якщо sfs_dump вихід містить забагато файлів для версії Excel або для обробки даних у менших бітах для продуктивності, спробуйте виконати процедуру один раз для кожного MTree, щоб було кілька електронних таблиць для системи.
Навіть один MTree sfs_dump вихід може бути занадто великим для Excel, у такому випадку можна використовувати розділення команди Linux (або будь-який інший подібний інструмент для розділення меж великого текстового файлу в інтернеті), щоб обробляти по одному кілька менших CSV-файлів, наприклад:
# split -b <size> <filename> <new filename prefix> (splits by file size) # split -l <size> <filename> <new filename prefix> (splits by number of lines) # split -n <size> <filename> <new filename prefix> (splits by number of pieces)
Наприклад, розділити вхідний текстовий файл на шматки по 200 МіБ кожна, щоб частини отримували початкові назви:
"sfs_dump.out.split"
Потім біжи:
# split -b 200M sfs_dump.out sfs_dump.out.split
Скрипт для використання "filesys sfs-dump" для повного дампінгу файлових даних через FS.
Для тих кількох релізів, які не мали можливості скидати деталі файлу у форматі CSV, скрипт, показаний нижче, надається користувачам у вигляді (без гарантій) користувачам для досягнення подібного результату шляхом обробки не-CSV sfs_dump Вихід
.Оскільки релізи, які не підтримують CSV-вихід, також не дозволяють скидати інформацію для всіх файлів у FS загалом, скрипт використовує SSH для підключення до цільового домену даних, щоб ітерувати список MTree, запускаючи дамп файлу по одному MTree за раз, збираючи список файлів для всіх MTree, потім перетворити у формат CSV, достатній для подальшої обробки:
#!/bin/bash
#### WARNING
#### This script is provided to you by Dell Technologies with NO GUARANTEE, as best-effort sample code to get a full FS sfs-dump collected
#### for DDOS releases which do not support "se sfs-dump", or as an alternative to it, in releases which support "filesys fs-dump"
#### That this script does not work for you, or if you need help setting it up, extending it, or resolving any issues, is not entitled to support
#### This script is not part of Dell PowerProtect / Data Domain, and hence it is not supported
#### Replace values below to suit your needs
USERNAME="sysadmin"
DD_HOSTNAME="10.n.n.172"
#### NO CHANGES NEEDED BEYOND THIS POINT
clear
echo "Script collects a full FS sfs-dump from \"${DD_HOSTNAME}\", using the command \"filesys sfs-dump\", one MTree at a time"
echo " * Script has to be configured by settting the \"USERNAME\" and \"DD_HOSTNAME\" variables within the top of the script"
echo " * Script expects passwordless SSH connection as \"USERNAME\" to the \"DD_HOSTNAME\" configured"
echo " * To configure passwordless SSH login to a DataDomain, check KB at https://www.dell.com/support/kbdoc/000004033 "
echo " * Test passwordless login is configured and working prior to going ahead with this script"
echo " * If passwordless login is not configured, script will ask for the \"${USERNAME}\" password "
echo " - Once for getting the MTree list"
echo " - And once for each one of the MTrees in \"${DD_HOSTNAME}\" "
echo
echo -n "Are you sure you want to continue? (y/n) : "
read -n 1 answer
echo
if [ "${answer}" = "y" ]; then
echo "Going ahead with the script."
echo
else
echo "Stopping script now. Re-run when passwordless login to \"${DD_HOSTNAME}\" as \"${USERNAME}\" works. Bye."
exit 1
fi
echo -n "1/6 : Collecting list of MTrees from DD..."
ssh ${USERNAME}@${DD_HOSTNAME} "mtree list" 2>/dev/null | grep ^/ | awk '{print $(NF-3)}' > mtree-list.txt
echo "Done."
n_mtrees=$( wc -l mtree-list.txt | cut -d" " -f1 )
echo -n "2/6 : Collecting per-Mtree sfs-dump information for ${n_mtrees} MTrees ..."
for mtree in `cat mtree-list.txt`; do
name=$(echo $mtree | cut -d/ -f4)
ssh ${USERNAME}@${DD_HOSTNAME} "filesys sfs-dump mtree ${mtree}" 2>/dev/null | grep ^/ > sfs-dump-${name}.txt
echo -n "."
done
echo "Done."
echo -n "3/6 : Putting all the files together..."
for file in `ls sfs-dump-*.txt`; do
if [ -s "${file}" ]; then cat ${file} >> sfs-dump-noCSV.txt; fi
done
echo "Done."
echo -n "4/6 : Converting sfs-dump output to CSV format..."
cat sfs-dump-noCSV.txt | grep ^/ | grep -v ^$ | awk '
BEGIN {print "name\tmtime\tfileid\tsize\tseg_bytes\tseg_count\tredun_seg_count\tpre_lc_size\tpost_lc_size"}
{
colon_index = index($0, ":")
filename = substr($0, 1, colon_index - 1)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", filename)
n = split(substr($0, colon_index + 1), fields, " ")
print filename "\t" fields[2] "\t" fields[4] "\t" fields[6] "\t" fields[10] "\t" fields[12] "\t" fields[14] "\t" fields[17] "\t" fields[19]
}' > sfs-dump-CSV.csv
echo "Done."
echo -n "5/6 : Cleaning up..."
for mtree in `cat mtree-list.txt`; do name=$(echo $mtree | cut -d/ -f4); rm -f sfs-dump-${name}.txt ; done
rm sfs-dump-noCSV.txt
rm mtree-list.txt
echo "Done."
echo -n "6/6 : Summary"
echo
n_files=$( wc -l sfs-dump-CSV.csv | cut -d" " -f1 )
echo
echo "Collecting whole FS sfs-dump data from ${HOSTNAME} completed"
echo "File includes output for ${n_mtrees} MTrees, with a combined $(( ${n_files} - 1 )) files across Active and Cloud Tiers (if applicable)"
echo "Start of file shown below for your convenience :"
echo "===================="
head -5 sfs-dump-CSV.csv
echo "===================="
echo
echo "Done."
exit 0
Скрипт для об'єднання вихідних даних не-CSV "sfs-dump" та "fileys report generate file-location" у CSV-файл з тією ж інформацією, що й script вище, а також для кожного рівня файлу та часу розміщення.
Наступний скрипт надається користувачам Dell як є (без гарантій) для користувачів, щоб сподіватися додати цінність до результату sfs_dump а FilesYs повідомляє про генерацію команд розташування файлу вище. Користувач може відфільтрувати файли за рівнем (Активний або будь-який із двох налаштованих Cloud Units), щоб отримати точніше уявлення про розподіл файлів по кожному рівні, додаючи інформацію про розташування рівня та час розміщення до кожного запису файлу у вихідному CSV
.Скрипти очікують sfs-dump (не sfs_dump -c) вивод як перший параметр, а звіт FileYs генерує вихід розташування файлу як другий. Вихід записується у жорстко закодоване ім'я файлу "sfs-dump-output-tiers.csv", яке може змінюватися всередині самого скрипту.
Результат може оброблятися за допомогою Excel так само, як пояснено вище.
#!/bin/bash
#### WARNING
#### This script is provided to you by Dell Technologies with NO GUARANTEE, as best-effort sample code to match the output from commands :
#### * sfs-dump (in non CSV format)
#### * filesys report generate file-location
#### So that a new CSV with the file paths appearing on both is created for all the data in sfs-dump file with the added tier and placement time information from location report
####
#### This script is not part of Dell PowerProtect / Data Domain, and hence it is not supported
####
#### Usage : extend-sfs-dump-with-tier.sh sfs-dump-output.csv file-location-output.log
#### Output : static "sfs-dump-output-tiers.csv" file name (may be changed below)
#### Replace values below to suit your needs
OUTPUT_FILENAME="sfs-dump-output-tiers.csv"
#### NO CHANGES NEEDED BEYOND THIS POINT
clear
if [ ! $# == 2 ]; then
echo "Combine output from sfs-dump and tier location report into a CSV file with tier and placement time information"
echo
echo "Usage : $0 SFS-DUMP-OUTPUT-FILE REPORT-FILE-LOCATION-FILE"
echo "NOTE : SFS-DUMP-OUTPUT-FILE has to be in non-CSV format"
exit 1
fi
INPUT_SFSDUMP="$1"
INPUT_LOCATION="$2"
echo -n "1/6 : Sanity checking input files..."
if [ ! -s "${INPUT_SFSDUMP}" ]; then
echo "Input file ${INPUT_SFSDUMP} does not exist"
exit 1
fi
if [ ! -s "${INPUT_LOCATION}" ]; then
echo "Input file ${INPUT_LOCATION} does not exist"
exit 1
fi
n_files_sfsdump=`grep ^/ ${INPUT_SFSDUMP} | wc -l`
n_files_location=`grep ^/ ${INPUT_LOCATION} | wc -l`
if [ ${n_files_sfsdump} -eq ${n_files_location} ]; then
echo -n "both have the same amount of files (${n_files_location}). "
else
echo -n "sfs-dump has ${n_files_sfsdump} files whereas location report has ${n_files_location} files, this may be normal if the difference is small. "
fi
echo "Done."
echo -n "2/6 : Sanitize \"file-location\" input..."
cat ${INPUT_LOCATION} | awk 'BEGIN {rejected="temp-location-rejected.log"; accepted="temp-location-accepted.log"} { if ( $0 ~ "Missing -unit") { gsub(/Missing -unit/, "Missing-Cloud-Unit", $0); print $0 > rejected } else { if ($0 ~ "^/" ) print $0 > accepted } }'
if [ -s "temp-location-rejected.log" ]; then
REJECTS_EXIST="yes"
echo -n "Some files in location report sit in unavailable or deleted cloud units, you may need to re-run this script after fixing the issue and gathering a new location report. "
cat temp-location-rejected.log temp-location-accepted.log | sed -e 's/\t/:\t/' | sort > temp-location-report-sorted.log
rm temp-location-rejected.log
else
cat temp-location-accepted.log | sed -e 's/\t/:\t/' | sort > temp-location-report-sorted.log
REJECTS_EXIST="no"
fi
rm temp-location-accepted.log
echo "Done."
echo -n "3/6 : Sanitize \"sfs-dump\" input..."
cat ${INPUT_SFSDUMP} | grep ^/ | sort > temp-sfs-dump.log
echo "Done."
echo -n "4/6 : Merging information for sfs-dump and location report..."
join -1 1 -2 1 temp-sfs-dump.log temp-location-report-sorted.log > temp-merged-information.log
rm temp-sfs-dump.log
rm temp-location-report-sorted.log
n_files_combined=`grep ^/ temp-merged-information.log | wc -l`
if [ ${n_files_combined} -eq 0 ]; then
echo "No files matched from input files. sfs-dump output must NOT be in CSV format. Exiting."
rm temp-merged-information.log
exit 1
fi
echo -n "Input files matched on ${n_files_combined} files. "
echo "Done."
echo -n "5/6 : Converting merged sfs-dump / location-report output to CSV format..."
cat temp-merged-information.log | grep ^/ | grep -v ^$ | awk '
BEGIN {print "name\tmtime\tfileid\tsize\tseg_bytes\tseg_count\tredun_seg_count\tpre_lc_size\tpost_lc_size\ttier\tplacement_time"}
{
colon_index = index($0, ":")
filename = substr($0, 1, colon_index - 1)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", filename)
n = split(substr($0, colon_index + 1), fields, " ")
print filename "\t" fields[2] "\t" fields[4] "\t" fields[6] "\t" fields[10] "\t" fields[12] "\t" fields[14] "\t" fields[17] "\t" fields[19] "\t" fields[27] \
"\t" fields[length(fields)-4] " " fields[length(fields)-3] " " fields[length(fields)-2] " " fields[length(fields)-1] " " fields[length(fields)]
}' > ${OUTPUT_FILENAME}
rm temp-merged-information.log
echo "Done."
echo -n "6/6 : Summary"
echo
echo
echo "Merging information from sfs-dump (${INPUT_SFSDUMP}) and location-report ${INPUT_LOCATION} output completed."
echo "Output file (${OUTPUT_FILENAME}) includes information for a total ${n_files_combined} files, out of ${n_files_sfsdump} in input sfs-dump, and ${n_files_location} in input location report."
if [ "${REJECTS_EXIST}" == "yes" ]; then
echo "Note there are some files in disconnected or deleted cloud units, for which the \"tier\" field has been replaced with \"Missing-Cloud-Unit\"."
fi
echo
echo "Start of file shown below for your convenience :"
echo "===================="
head -5 ${OUTPUT_FILENAME}
echo "===================="
echo
echo "You may follow the instructions in https://www.dell.com/support/kbdoc/000081345 to process this CSV file in an spreadhseet"
echo
echo "Done."
exit 0
Для користувачів Veritas NetBackup:
Veritas NetBackup (NBU) відомий тим, що створює файли в домені даних із двокрапками в іменах файлів. Наприклад, наступні шляхи до імен NBU є дійсними, коли домен даних використовується як бекенд-сховище для NBU:
/data/col1/MTREE_NAME/POLICY-NAME_1400502741_C1_F1:1400502741:VM_PRD-02:4:1:: /data/col1/MTREE_NAME/POLICY-NAME_1400502741_C1_F2:1400502741:VM_PRD-02:4:1:: /data/col1/MTREE_NAME/POLICY-NAME_1400502741_C1_HDR:1400502741:VM_PRD-02:4:1::
Це створює проблему з наведеними вище прикладами скриптів, оскільки двокрапковий символ використовується як роздільник для sfs_dump виведення команд і запуск описаних вище скриптів давав неправильні результати.
У таких випадках сценарій слід відредагувати таким чином:
--- iterate-dd-for-fs-sfs-dump.sh 2024-01-23 06:32:16.521409000 -0500
+++ iterate-dd-for-fs-sfs-dump-NBU.sh 2024-02-27 03:26:42.808246000 -0500
@@ -55,11 +55,11 @@
cat sfs-dump-noCSV.txt | grep ^/ | grep -v ^$ | awk '
BEGIN {print "name\tmtime\tfileid\tsize\tseg_bytes\tseg_count\tredun_seg_count\tpre_lc_size\tpost_lc_size"}
{
- colon_index = index($0, ":")
- filename = substr($0, 1, colon_index - 1)
+ colon_index = index($0, ":::")
+ filename = substr($0, 1, colon_index + 1)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", filename)
n = split(substr($0, colon_index + 1), fields, " ")
- print filename "\t" fields[2] "\t" fields[4] "\t" fields[6] "\t" fields[10] "\t" fields[12] "\t" fields[14] "\t" fields[17] "\t" fields[19]
+ print filename "\t" fields[3] "\t" fields[5] "\t" fields[7] "\t" fields[11] "\t" fields[13] "\t" fields[15] "\t" fields[18] "\t" fields[20] "\t"
}' > sfs-dump-CSV.csv
echo "Done."
Зміни використовуються для скрипта, який ітерує всі MTree у домені даних для отримання кожного MTree sfs_dump Data, зміни ті ж самі для іншого сценарію. Однак, як і для самих скриптів, наведені вище зміни надаються Dell без жодної гарантії, сподіваючись, що вони будуть корисними.