Data Domain. Как просмотреть список файлов в файловой системе Data Domain с помощью команды sfs-dump

摘要: В этой статье объясняется, как использовать интерфейс командной строки в Data Domain для дампа списков файлов и каталогов для отдельных MTrees или файловой системы в целом. Это позволяет пользователям узнать, что хранится в Data Domain, из приложения резервного копирования. ...

本文章適用於 本文章不適用於 本文無關於任何特定產品。 本文未識別所有產品版本。

症狀

Data Domain — это пассивное внутреннее устройство хранения данных. Оно сохраняет только то, что указывают приложения резервного копирования, и удаляет данные только тогда, когда приложение резервного копирования дает указание на удаление файлов. Data Domain никогда не создает и не удаляет файлы самостоятельно.

Независимо от полученного протокола, файловая система Data Domain содержит только файлы (в каталогах), организованные в MTrees. Все файлы (как для файлов в активном режиме, так и для любых облачных устройств) имеют одинаковый корневой каталог и пространство имен; существует одно пространство имен, что означает, что в списках файлов и каталогов файлы включаются в активные и облачные устройства без каких-либо различий.

Получение подробного дампа файла может быть полезно по следующим причинам:
  • При сравнении со списком файлов, управляемых приложением резервного копирования, для проверки на наличие файлов, потерянных из этого приложения резервного копирования.
  • Вывод списка всех файлов с определенным порогом по периоду создания, чтобы определить, правильно ли применяется приложение резервного копирования относительно срока хранения резервных копий
Из-за недавних изменений, внесенных в DDOS, команды, используемые для сбора списков файлов из систем Data Domain, со временем менялись. Эти параметры доступны только из интерфейса командной строки DD и могут быть следующими, в зависимости от версии:
  • Для DDOS более ранних версий, чем 7.13.0.0, 7.10.1.15, 7.7.5.25 и 6.2.1.110
se sfs_dump
  • Для любой DDOS версии 7.13.0.0, 7.10.1.15, 7,7.5,25, 6.2.1.110 или более поздней
filesys sfs-dump

原因

DDOS выпусков 7.13.0.0, 7.10.1.15, 7.7.5.25, 6.2.1.110 и более поздних больше не предоставляет доступ к следующей команде в режиме SE:
sfs_dump
Режим SE, необходимый для доступа к этой функции, исключен, как описано в DSA-2023-412. Обновление безопасности Dell Technologies PowerProtect для устранения нескольких уязвимостей

Временно часть этой функции в старой sfs_dump команде в режиме SE была недоступна, но была повторно введена на более позднем этапе. Поэтому эта статья базы знаний пытается объяснить различия и способы обработки выходных данных команды в каждом случае.

解析度

Получение подробного списка файлов в Data Domain из интерфейса командной строки, а в конечном счете процесс получения аналитических данных о файлах, хранящихся в Data Domain, зависит от выполняемого выпуска DDOS. После сбора текстового выходного файла с подробными сведениями о файле обработка выходных данных в более пригодной для использования форме всегда будет одинаковой, поскольку формат вывода для всех выпусков DDOS один и тот же (или может быть преобразован в общий формат с помощью сценария).

Общим для всех выпусков DDOS является требование входа в систему Data Domain как пользователь-администратор и использования клиента SSH, который поддерживает ведение журнала выходных данных консоли в текстовом файле на стороне клиента (PuTTY отлично подходит для этого). Пользователь должен настроить клиент SSH таким образом, чтобы он записывал выходные данные в текстовый файл на клиентском компьютере (гарантируя отсутствие ограничений по количеству зарегистрированных строк или длине отдельной строки). Файл журнала сеансов SSH (и, следовательно, списки файлов DD) записывается не в Data Domain, а на (обычно) настольном компьютере, с которого инициируется подключение SSH.

При сборе выходных данных сеанса SSH убедитесь, что файлу присвоено значимое имя (например, добавлено имя хоста Data Domain и имя MTree, дамп которого необходим), и что для файла журнала достаточно места (это может быть приблизительно 200 Мбайт для систем с 1 млн файлов).

Точная команда для выполнения из интерфейса командной строки DD для сбора списков файлов зависит от используемой версии DDOS, которые обобщены ниже.
 

Выпуски DDOS до 7.13.0.0, 7.10.1.15, 7.7.5.25 и 6.2.1.110.

В этих выпусках все еще сохраняется поддержка se sfs_dump команды (и -c возможность вывода сведений о файле непосредственно в формате CSV без дальнейшей обработки), хотя переход в режим SE не рекомендуется по соображениям безопасности, а вместо этого модернизация до последнего доступного выпуска LTS 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 формат идентичен указанному выше для более поздних выпусков. В случаях, когда использовался параметр  (для выходных данных в формате 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 или более поздние.

В этом выпуске больше нет доступа к sfs_dump из режима SE (недоступны следующие данные):
se sfs_dump
Режим SE исключен из-за обнаруженных проблем с безопасностью. Альтернативная команда приведена ниже. Обратите внимание на немного другое имя команды, и в данном случае MTree, который будет указан после ключевого слова «MTree»:
# filesys sfs-dump mtree <mtree-path>
Для выпусков в заголовке эта команда sfs-dump по сравнению с se sfsa_dump:
  • Новая команда не поддерживает параметр -c для экспорта сведений дампа файла в формате CSV (столбца)
  • Новая команда может запускать только один MTree за раз, не имеется поддержки выполнения для всей файловой системы в одном вызове
Если заказчикам в этих выпусках требуется выполнить дамп сведений о всех файлах MTrees в файл, необходимо выполнить итерации по всему списку MTrees в файловой системе Data Domain и выполнить команду один раз для каждого из них. Пользователь может получить список MTrees в системе, выполнив команду:
# mtree list
Выходные данные из приведенной ниже команды идентичны выходным данным для предыдущей команды se sfs_dump при использовании без параметра -c .
filesys sfs-dump
Убедитесь, что вы вошли в систему Data Domain в качестве пользователя-администратора с клиентом 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 или более поздние.

В связи с высоким спросом клиентов некоторые функции из старой команды se sfs_dump были введены повторно и теперь доступны для команды filesys sfs-dump , а именно:
  • Возможность добавить параметр -c , чтобы выходные данные выводятся на печать в версии формата, схожего с CSV (поля, разделенные столбцами)
  • Возможность выполнить дамп с информацией о файле для всех файлов в файловой системе сразу
Команда остается той же, что и для непосредственно предыдущих версий, с упомянутыми улучшениями, приведенными ниже.
 
#### 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 байт).
  • Локальное сжатие файлов (то, что мы называем «lcomp» или локальным сжатием) — это коэффициент 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 при этом не выполняется ни дедупликация (без избыточных сегментов), ни локальное сжатие. Это означает, что файл является сжатым.
 
Внимание! Данные в выходных файлах, касающиеся размера, отличного от «предварительного размера файла в байтах» (pre-comp size for the file in bytes), должны приниматься как приблизительные и не могут служить источником достоверной информации. Метаданные для файлов создаются во время получения, внесения и обработки файлов. Хотя они верны на тот момент, они не обновляются с тех пор, поэтому со временем устаревают. Кроме того, тот факт, что этот файл post_lc_size имеет заданный объем, не означает, что дисковое пространство, используемое этим файлом, идентично этому объему, так как существует много издержек на уровне файловой системы, которые не учитываются на уровне каждого файла. Ограничения те же, что и для тех, которые уже известны для команды:
mtree show compression
Использование информации в выходных файлах выше предусматривает обработку числовых данных сообразно целям пользователя. Ниже приведены несколько примеров сценариев использования.
  • Определение gcomp и lcomp для файлов, соответствующих определенному пути (если путь может быть сопоставлен с определенным сервером резервного копирования, клиентом, политикой, заданием и т. д.)
  • Расчет объема данных (предварительный размер), хранящихся в заданном местоположении, которое превышает заданный период времени (для определения потерянных данных или поиска и устранения неисправностей, связанных с тем, что в приложении резервного копирования своевременно не истекает срок действия резервных копий)
  • Любой другой тип статистики может использоваться для
Чтобы иметь единый набор инструкций и компенсировать потерю sfs_dump -c параметра, в более поздних выпусках мы рекомендуем преобразовывать выходные данные в формат 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
 
Примечание. Приведенная выше команда игнорирует все данные во входном файле (sfs-dump-noCSV.txt), не начинающиеся с косой черты, так как только строки, начинающиеся с «/data», должны содержать сведения о файле для обработки. Выходные файлы имеют первую строку в качестве заголовка и используют символ табуляции (\t) в качестве разделителя поля.

Все, что находится ниже этого пункта, предоставляется пользователям в виде «как есть». Компания Dell не несет дает никаких гарантий или не несет никаких обязательств в отношении приведенных ниже инструкций. Получение аналитических данных из сведений о списке файлов — это задача пользователя, и способы достижения этой цели полностью зависят от инструментария, используемого для майнинга данных в выходных данных дампа файлов, цели, которую необходимо достичь, и собственного опыта пользователя в обработке данных из выходных данных команды, подробно описанных выше. Один пользователь может использовать обработку текстовых файлов в командной строке Linux для дампа некоторых агрегированных данных, другие могут создавать входные данные для значений диаграмм с помощью «gnuplot», в то время как считается, что большинство пользователей стремится к более простому (но ограниченному) подходу с созданием электронной таблицы из файла CSV для анализа.

Компания Dell прикладывает усилия, чтобы убедиться, что приведенные ниже инструкции верны, работают и полезны для пользователей, но мы не можем гарантировать, что они сработают в вашем конкретном случае, и мы не предоставляем по ним поддержку, которая на них не распространяется.


Импорт выходных данных sfs_dump в формате CSV в электронную таблицу (пример для Excel):

После того как версия CSV списка сведений о файле станет доступна, одним из способов получения аналитических данных на основе таких сведений является загрузка данных в программное обеспечение для электронных таблиц. В качестве примера используется Microsoft Excel, хотя инструкции должны быть аналогичными для другого программного обеспечения. Чтобы получить текстовый файл CSV, импортированный в Excel как CSV, выполните следующие действия.
  1. Откройте Excel и создайте новую пустую электронную таблицу
  2. Перейдите в меню Data сверху, нажмите на значок From Text/CSV
  3. В диалоговом окне найдите файловые данные в формате CSV (sfs-dump-CSV.csv как и в примере сценария преобразования из формата, отличного от CSV), выберите их и нажмите Import
  4. Если формат входного файла верен, и Excel сможет автоматически распознать формат из первых 200 строк (что обычно происходит), в диалоговом окне должен отображаться предварительный просмотр создаваемой электронной таблицы. Просмотрите информацию, чтобы убедиться, что она выглядит должным образом, в том числе что первая строка определяется как заголовки
  5. Если при предварительном просмотре все выглядит отлично, нажмите кнопку Load в нижней части диалогового окна, и новая электронная таблица будет представлена с хорошим форматированием, а заголовки полей будут преобразованы в заголовки с поддержкой поиска и фильтрации.
Данные в электронной таблице уже полезны. Можно применить Number Filter для числовых полей, таких как size (чтобы отображались только файлы, превышающие заданный размер), или применить Text Filter к полю Name, чтобы в выходных данных сведений о файле Data Domain отображались только файлы, соответствующие заданному шаблону (только те, которые начинаются с пути для определенного MTree), а также выполнять производные вычисления на основе этих данных.

Правильно импортированная электронная таблица Excel должна содержать данные в столбцах A–I. Если данные присутствуют только в столбце A, но растянуты по экрану, закройте Excel и повторите действия 1–5 выше.

Добавление новых расчетных полей.

Электронную таблицу можно расширить на нужное пользователю количество расчетных полей. Интересным полем, которое необходимо добавить, являются человекочитаемые дата и время, соответствующие mtime файлов (обычно время последнего изменения — это время записи в DD). Кроме того, при необходимости можно рассчитать и отобразить некоторые параметры сжатия для каждого файла, учитывая цели использования данных. Новые столбцы заполняются автоматически с помощью формул Excel, как описано ниже.

Преобразование метки времени:

Чтобы преобразовать метку времени UNIX в дату и время в человекочитаемом формате, выполните следующие действия.
  1. Нажмите правой кнопкой мыши на ячейку J2 и выберите «Format Cells».
  2. В списке «Category» слева выберите «Custom».
  3. Если это еще не сделано, создайте формат для человекочитаемого формата даты и времени (пример включает строку EST в конце. Ее можно заменить заменить текстовым определением часового пояса или полностью удалить «EST», если это не интересно): yyyy-mm-dd hh:mm:ss «EST»
  4. Нажмите «OK», завершив исправление. Теперь ячейка J2 имеет пользовательский формат для данных.
  5. Добавьте следующую формулу в ячейку J2. В формуле замените (-6*3600) правильным разницей часовых поясов, соответствующей UTC для настроенного часового пояса в Data Domain на момент получения данных «sfs-dump». Например, восточное время США отстает от UTC в течение лета на 6 часов, отсюда и «-6».
Если вас не интересует столь точная настройка времени, вместо этого можно использовать сокращенную форму формулы. Самый простой способ добавить формулу и избежать перезаписи формата даты и времени — скопировать одну из двух версий ниже и вставить в ячейку J2 после ввода символа «equal to» = в ячейке, чтобы начать ее редактирование:
(((B2/1000000000+(-6*3600))/86400)+25569)
(((B2/1000000000)/86400)+25569)
Примечание. Если вставить текст в J2 без предварительного перевода ячейки в режим редактирования (так называемый), формат ячейки будет перезаписан. Кроме того, перед формулой можно вставить символ «=», скопировать весь текст и нажать правой кнопкой мыши ячейку J2, чтобы выполнить команду Paste Special, затем выбрать As Text и нажать OK. Эти действия должны иметь тот же эффект. Если все выполнено правильно, Excel автоматически выполняет несколько действий.
  • Вставьте формулу в ячейку J2 и скопируйте ее на все оставшиеся ячейки столбца 
  • Рассчитайте формулу для всей электронной таблицы и отобразите значения даты и времени в настроенном формате
  • Достаточно отформатировать столбец согласно существующим, и настройте заголовок Date с возможностью применения Date Filters; единственное, что нужно сделать, — задать правильное имя для столбца (Date).

Информация о сжатии

Можно добавить столбцы для информации о сжатии для каждого файла, выполнив описанные выше действия. В этот раз отображаются формулы, включая «=», поэтому необходимо скопировать весь текст и нажать Paste Special в виде текста:
  • Скопируйте следующую формулу и Paste Special as Text в ячейке K2, чтобы создать столбец для пофайловой дедупликации или gcomp:
    =IF(H2=0,0,D2/H2)
  • Скопируйте следующую формулу и Paste Special as Text в ячейке 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 дней назад:
  1. Нажмите стрелку вниз в заголовке Name, выберите Text Filters, затем Begins With и введите /data/col1/backup/ в поле. Косая черта в конце важна. Нажмите кнопку ОК.
  2. Нажмите стрелку вниз в заголовке Last Written Date, выберите Date Filters, затем Before. Используйте средство выбора даты в правой части диалогового окна, чтобы выбрать дату 30 дней назад. Нажмите OK.
В строке состояния внизу отображается количество строк, соответствующих выбранному диапазону.

其他資訊

Команда для дампа местоположения файла (активный и облачный уровни)

Существует способ создания дампа списка файлов с указанием того, какие файлы находятся на активном уровне, а какие — в любых облачных устройствах, как указано ниже.
#### 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.60.36.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

Сценарий для объединения выходных данных «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 без каких-либо гарантий, в надежде, что они будут полезны.

受影響的產品

Data Domain

產品

Data Domain
文章屬性
文章編號: 000081345
文章類型: Solution
上次修改時間: 27 5月 2025
版本:  21
向其他 Dell 使用者尋求您問題的答案
支援服務
檢查您的裝置是否在支援服務的涵蓋範圍內。