Data Domain. Вывод списка файлов в файловой системе Data Domain с помощью sfs-dump
Summary: В этой статье описывается использование интерфейса командной строки (CLI) Data Domain для создания дампа списков файлов и каталогов для отдельных MTree или для файловой системы (FS) в целом. ...
Symptoms
Независимо от полученного протокола, файловая система Data Domain содержит только файлы (в каталогах), организованные в MTrees. Все файлы (как для файлов в активном режиме, так и для любых облачных устройств) имеют одинаковый корневой каталог и пространство имен; существует одно пространство имен, что означает, что в списках файлов и каталогов файлы включаются в активные и облачные устройства без каких-либо различий.
Получение подробного дампа файла может быть полезно по следующим причинам:
-
При сравнении со списком файлов, управляемых приложением резервного копирования, для проверки на наличие файлов, потерянных из этого приложения резервного копирования.
-
Вывод списка всех файлов с определенным порогом по периоду создания, чтобы определить, правильно ли применяется приложение резервного копирования относительно срока хранения резервных копий
Cause
Инструмент интерфейса командной строки для создания списков файлов sfs_dump.
Resolution
Используйте ведение журнала сеансов SSH для сбора выходных данных списка. Точная команда, которую необходимо выполнить из интерфейса командной строки DD для сбора списков файлов, зависит от используемой версии операционной системы Data Domain (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 в электронную таблицу
Получение подробного списка файлов в Data Domain из интерфейса командной строки и, в конечном итоге, процесс получения аналитических данных о файлах, хранящихся в Data Domain, зависят от запущенного выпуска DDOS.
После сбора текстового выходного файла с подробными сведениями о файле обработка вывода в более удобную для использования форму всегда одинакова, так как формат вывода для всех выпусков DDOS одинаков (или может быть преобразован в общий формат с помощью скрипта).
Ведение журнала сеанса SSH:
Общим для всех выпусков DDOS является требование входа в Data Domain в качестве пользователя-администратора с помощью клиента SSH, который поддерживает ведение журнала вывода консоли в текстовый файл на стороне клиента (для этого хорошо работает PuTTY). Настройте клиент SSH таким образом, чтобы он записывал выходные данные в текстовый файл на клиенте (чтобы не было ограничений на количество регистрируемых строк или длину отдельных строк). Файл журнала сеансов SSH (и, следовательно, списки файлов DD) записывается не в Data Domain, а в (обычно) настольном клиенте, с которого инициируется подключение SSH.
При сборе выходных данных сеанса SSH обязательно присвойте файлу осмысленное имя (например, добавьте имя хоста Data Domain и имя MTree для дампа) и убедитесь, что для файла журнала достаточно места, которое может составлять примерно 200 Мбайт для Data Domain с 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.
Войдите в систему Data Domain в качестве пользователя с правами администратора с помощью клиента 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>
Команда в этих версиях также может создавать список для всех файлов в файловой системе одновременно (вместо одного MTree за раз). Чтобы создать дамп сведений о файлах для всех файлов в файловой системе, не указывайте путь 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 command, по сравнению с se sfs_dump.
- Новая команда не поддерживает параметр
-cдля экспорта сведений дампа файла в формате CSV (столбца) - Новая команда может запускать только MTree за раз, нет поддержки для выполнения всей файловой системы за один вызов
Если требуется выгрузить все сведения о файле MTree в файл, выполните итерацию по всему списку MTree в Data Domain FS и выполните команду один раз для каждого из них. Пользователь может получить список MTrees в системе, выполнив команду:
# mtree list
Войдите в систему Data Domain в качестве пользователя admin с помощью клиента 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 (поля, разделенные столбцами) - Возможность выполнить дамп с информацией о файле для всех файлов в файловой системе сразу
- Используйте ведение журнала сеансов SSH для сбора выходных данных.
Команда остается той же, что и для непосредственно предыдущих версий, с упомянутыми улучшениями, приведенными ниже.
#### 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
Эта команда остается «скрытой», поэтому она не отображается в интерактивной справке интерфейса командной строки или в документах.
Как обработать данные sfs_dump или filesys 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 байт. При прохождении через конвейер приема файловой системы Data Domain будет использоваться 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 байт).
По сравнению с файлом, показанным для примера № -c при этом не выполняется ни дедупликация (без избыточных сегментов), ни локальное сжатие. Это означает, что файл является сжатым.
post_lc_size имеет заданный объем, не означает, что дисковое пространство, используемое этим файлом, идентично этому объему, так как существует много издержек на уровне файловой системы, которые не учитываются на уровне каждого файла. Ограничения те же, что и для тех, которые уже известны для команды:
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), выберите их и нажмите Import - Если формат входного файла верен, и Excel сможет автоматически распознать формат из первых 200 строк (что обычно происходит), в диалоговом окне должен отображаться предварительный просмотр создаваемой электронной таблицы. Проверьте информацию, чтобы убедиться, что она хорошо выглядит, в том числе то, что первая строка определяется как заголовки
- Если с превью все в порядке, нажмите кнопку Загрузить в нижней части диалога, и новая таблица будет представлена с красивым форматированием, а заголовки полей превратятся в заголовки поиска и фильтров.
Данные в электронной таблице уже полезны, например, применение числового фильтра к числовым полям, таким как размер (для отображения только файлов выше заданного размера) или применение текстового фильтра к полю имени, чтобы отображались только файлы в выводе сведений о файле Data Domain, соответствующие заданному шаблону (только те, которые начинаются с пути для конкретного MTree). и выполнять другие производные вычисления на основе этих данных.
Правильно импортированная таблица Excel должна содержать данные в столбцах A-I. Если данные присутствуют только в столбце A, но растягиваются на весь экран, закройте Excel и повторите шаги 1–5, описанные выше.
Добавление дополнительных вычисляемых полей:
Электронную таблицу можно расширить на нужное пользователю количество расчетных полей. Интересным полем, которое необходимо добавить, являются человекочитаемые дата и время, соответствующие mtime файлов (обычно время последнего изменения — это время записи в DD). Кроме того, при необходимости можно рассчитать и отобразить некоторые параметры сжатия для каждого файла, учитывая цели использования данных. Новые столбцы заполняются автоматически с помощью формул Excel, как описано ниже.
Преобразование метки времени:
Чтобы преобразовать метку времени UNIX в дату и время в человекочитаемом формате, выполните следующие действия.
- Нажмите правой кнопкой мыши на ячейку J2 и выберите «Format Cells».
- В списке «Category» слева выберите «Custom».
- Если это еще не сделано, создайте формат для человекочитаемого формата даты и времени (пример включает строку EST в конце. Его можно заменить текстовым определением часового пояса или полностью удалить "EST", если вас это не интересует): yyyy-mm-dd hh:mm:ss "EST"
- Нажмите «OK», завершив исправление. Теперь ячейка J2 имеет пользовательский формат для данных.
- Добавьте следующую формулу в ячейку J2. В формуле замените (-6*3600) правильным разницей часовых поясов, соответствующей UTC для настроенного часового пояса в Data Domain на момент получения данных «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)
- Скопируйте следующую формулу и Paste Special as Text в ячейке L2, чтобы создать столбец для общего пофайлового коэффициента сжатия локального сжатия:
=K2*L2
Присвойте новым столбцам правильное имя. Если вы хотите, чтобы формат значений сжатия был другим (например, чтобы ограничить количество десятичных знаков), выполните действия, описанные в примере, для даты и времени и задайте формат числовых значений ячейки перед вставкой формулы.
Не забудьте обеспечить безопасность вашей работы, перейдя в меню File и выполнив действие Save as, чтобы задать тип сохраняемого файла Excel Workbook (*.xlsx), и обеспечить сохранение форматирования и фильтрации.
После выполнения описанных действий электронная таблица содержит следующие (соответствующие) столбцы:
- A cодержит имя файла
- B содержит метку даты (в эпохе UNIX в наносекундах) на момент последней записи файла
- D содержит исходный размер файла
- H содержит размер после глобального сжатия
- I содержит размер после глобального и локального сжатия
- J содержит метку даты для последней записи файла в человекочитаемой форме
- K содержит глобальное сжатие файлов (дедупликацию) для файла
- L содержит локальное сжатие для файла
- M содержит полное сжатие для файла
Все размеры файлов указаны в байтах.
Теперь Excel можно фильтровать или сортировать по мере необходимости для создания отчетов по данным.
- Например, чтобы отобразить только файлы в MTree /data/col1/backup, созданные более 30 дней назад:
- Нажмите стрелку вниз в заголовке Name, выберите Text Filters, затем Begins With и введите
/data/col1/backup/в поле. Косая черта в конце важна. Нажмите ОК. - Нажмите стрелку вниз в заголовке Last Written Date, выберите Date Filters, затем Before. Используйте средство выбора даты в правой части диалогового окна, чтобы выбрать дату 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 ------------------------- ---------------------- ---------------------- ---------------------------
Однако приведенная выше команда, как правило, недостаточна для большинства целей, поскольку, к примеру, размер указан в человекочитаемых единицах (а не в байтах или МиБ или любом заданном множителе), а время размещения совпадает со временем создания резервных копий в Data Domain для файлов на активном уровне, но не для файлов в облачных устройствах («время размещения» для файлов в облаке — это дата и время перемещения файла в облачное устройство).
Кроме того, обратите внимание, что приведенная ниже команда (и сценарий преобразования, отличный от CSV sfs_dump) выводит данные в столбцах, разделенных вкладками. Символы вкладки, присутствующие в выходных данных, должны быть сохранены в файле журнала, в противном случае описанные выше действия по импорту CSV в Excel не смогут правильно разделить поля.
sfs_dump -c
Приведенные инструкции предполагают разумное знание Excel, но могут быть переведены в другое программное обеспечение для электронных таблиц.
Современные версии Excel допускают много строк, но помните, что каждый файл в sfs_dump выходных данных для обработки представляет собой одну строку. Поэтому Excel должен иметь возможность быстро обрабатывать и обновлять электронную таблицу с количеством строк, равном количеству файлов в наборе данных. Жесткое ограничение составляет чуть более 1 миллиона строк, но даже при количестве файлов значительно меньше, Excel может не подойти для этой задачи (слишком медленный).
Если sfs_dump на выходе слишком много файлов для версии Excel или для обработки данных в меньших битах для производительности, попробуйте запустить процедуру один раз для каждого MTree, чтобы было несколько электронных таблиц для системы.
Даже одно MTree sfs_dump Вывод может быть слишком большим для Excel, и в этом случае можно использовать команду split 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" для дампа файловых данных во всей файловой системе.
Для тех нескольких выпусков, в которых не было возможности дампа сведений о файле в формате CSV, нижеприведенный сценарий предоставляется компанией Dell в виде «как есть» (без гарантии) пользователям для достижения аналогичного результата путем обработки выходных данных, отличных от sfs_dump CSV.
Поскольку выпуски, не поддерживающие выходные данные в формате CSV, также не позволяют создавать дамп информации для всех файлов в файловой системе в целом, сценарий использует SSH для подключения к целевой системе Data Domain для итерации по списку MTrees, одновременно запуская дамп файлов по одному MTree, чтобы собрать список файлов для всех MTrees, а затем преобразовать в формат 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" и "filesys report generate file-location" в CSV-файл со всей той же информацией, что и в сценарии выше, а также для каждого уровня файла и информации о времени размещения.
Следующий сценарий предоставляется виде «как есть» (без гарантии) компанией Dell пользователям в качестве средства, которое, как мы надеемся, позволит добавить ценности выходным данным sfs_dump и вышеприведенным командамfilesys report generate file-location. Пользователь может отфильтровать файлы на основе уровня (активный или любое из двух настроенных облачных устройство) для получения более точной информации о распределении файлов на уровень, добавляя информацию о расположении уровня и времени размещения в каждую запись файла в выходных данных формата CSV.
Сценарии ожидают sfs-dump (не sfs_dump -c) в качестве первого параметра, а в выходных данных filesys report generate file-location — в качестве второго. Выходные данные записываются в файл с жестким кодом с названием «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) создает файлы в Data Domain с символами двоеточия в составе имен файлов. Например, ниже приведены допустимые пути к именам файлов NBU, если Data Domain используется в качестве внутреннего хранилища для 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."
В то время как изменения распространяются на весь сценарий, который итерирует по всем MTrees в Data Domain, чтобы извлечь информацию о каждом MTree, sfs_dump изменения те же для другого сценария. Однако, как и в случае с самими сценариями, приведенные выше изменения предоставляются Dell без каких-либо гарантий в надежде на их полезность.