Обновить

Обзор неявных возможностей дисковой подсистемы Windows 11

Уровень сложностиСредний
Время на прочтение31 мин
Охват и читатели36K
Всего голосов 107: ↑106 и ↓1+136
Комментарии59

Комментарии 59

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

Сплю и вижу как набираю в cmd "Get-ChildItem -Recurse -Force | Where-Object LinkType -eq 'SymbolicLink' | Select-Object FullName, Attributes, Target" вместо типичного ls -la в Linux. Мне снится:

Get-ChildItem -Recurse -Force -ErrorAction SilentlyContinue | ForEach-Object {  $Result= $(fsutil.exe file queryea $_.FullName )  if ( $Result -match 'Extended Attributes \(EA\) information for file' ) {    $_.FullName  }}

вместо ls -l@ или lsattr -la в Linux.

В статье есть информация полезная при написания вирусов под Windows, однако на уровне пользователя: м.б. вы как-нибудь сами будете пользоваться этим "может быть даже и лучше", а?))

Ссылками редко пользуются, поэтому и инструменты для них сложные. Но никто не мешает написать свой ls

ls в PowerShell работает, но ключи другие.

В древние времена в Norton Commander набор функций клавиш F1..F10 (и надписи на кнопках внизу) менялись при нажатии на Shift (а может и Alt, Ctrl, не помню). Если бы в Total Commander сделали аналогично, и повесили бы туда как минимум HardLink и SymLink - уверен, пользовались бы больше. Для тех кто пользуется проводником - тоже какие-то сочетания клавиш при перетаскивании файлов.

Если бы в Total Commander сделали аналогично

это Вы про меняющиеся подписи?

потому что F5 - копирование, а Alt-F5 - архивирование в TC.

PS: Ну и я редко у кого вижу Панель функциональных клавиш включенной.

Да, про меняющиеся подписи. Человек - существо такое, пока не увидит - и не узнает. А если бы постоянно маячили перед глазами слова "HardLink" и "SymLink" в интерфейсах различных "проводников", то за столько лет развития десктопных систем использование ссылок уже вошло бы в пользовательскую культуру.

Используйте FarManager, там Alt+F6 и ссылки создает и подсвечивается при нажатии Alt.

Для виндового проводника кстати есть Link Shell Extension, оно показывает оверлейными иконками ссылки

Ровно до тех пор, пока за эти оверлеи не начнут драку dropbox, onedrive, tortoise и прочие. А оверлеев всего 16 штук. Если только в новых версиях винды (11?) этот лимит не увеличили. Dropbox, насколько я помню, самый агрессивный - в соответствующем разделе реестра он в названия своих оверлеев вставляет аж по три (если не запамятовал) пробела. Ну два - точно. Чтобы быть самым первым.

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

А вы их хард и симлинками нагрузить хотите.

Да это вообще была порнография с самого начала. Уж не знаю, какое альтернативно мыслящее существо выделило расширение в отдельную сущность. Байтик сэкономили, мать иху... и, кстати, в LFN точки присутствуют.

Всегда всем неофитам вбиваю в голову мысль, что есть просто имя файла, и есть полное имя файла - которое состоит из имени, точки и расширения. И выделение расширения из полного имени - это просто интерпретация части полного имени, которая делается тупо для обеспечения упрощённого, без указания конкретного приложения, запуска файла.

Те, кому это было надо, пользовались ссылками. Например мне было нужно и я делал симлинки в ntfs года с 2012. А то, что их нет в тотал-коммандере... Ну так в в нортон-коммандере их нет? А тотал-коммандер в первую очередь копирует его функциональности? Он и тотал-коммандером тоже стал не сразу...

Более того, даже то, что симлинки есть в миднайт-коммандере - ни разу не плюс. Говорят, что пользоваться mc - недостойно настоящего линуксоида.

Для создания симлинков в Total Commander есть удобная внешняя утилита:
https://totalcmd.net/plugring/ntfslinks.html
для отображения пути на который ссылается симлинк (в отдельном столбце) есть не очень удобный плагин:
https://totalcmd.net/plugring/nl_info.html

А мне Posh нравился. Работать с объектами как то поинтереснее чем парсить std выводы. Ну и если есть небольшие знания C# то и писать скрипты веселее чем на bash.

Приведенные вами команды делают не то же самое, что скрипты PS. А если вы попытаетесь сделать то же самое, у вас тоже будет пайплайн из нескольких команд. И даже самая поверхностная разница между ним и кодом PS будет очень интересная - что делает код PS, понятно практически любому человеку, которому может понадобиться работать с симлинками (при условии, что он хотя бы просто знает английский), а что делает вот эта мешанина символов в командной строке линукса - только тем, кто потратил энное время на изучение команд шелла.

Про более глубокие различия умолчим, в целом о разнице между PS и обычными стиральными порошками шеллами (как cmd, так и линуксовыми) в сети написано уже столько, что просто странно видеть очередной коммент вида "а в PS команды длиннее".

Плюс уже верно заметили, что если вам по какой-то причине надо запускать длинную команду регулярно, в PS легко делаются алиасы, превращающие его стандартный человекочитаемый код в такую же значительно более короткую мешанину символов.

А еще никто не запрещает использовать старый добрый cmd - dir /A:L .

Меня тут накрыла мысль сделать raid0 на системном диске. Почитал я инструкцию (родную, микрософтовскую) как это делается в современной венде и что-то передумал...

Так это ещё и технически бессмысленно сейчас. Так то в нулевых многие так делали, когда SSD не было.

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

Я не знаю, какие такие диски паяют в пакистанских гаражах, по моему если мы говорим про НЖМД, то они как раз серьезно усложнились и прибавили в качестве и надёжности, когда их перестали использовать для установки ОС и им осталась роль хранилища "второй очереди" или вообще холодного хранения. Тут конечно черепичная запись вмешалась, но сегодня хватает НЖМД без нее. В любом случае - НЖМД сегодня это не про скорость, а про объем. И жертвовать надёжностью (а raid0 рассыпался от любого чиха) ради прибавки в скорости, смешной по сравнению с показателями ссд (потому что все равно упор в механику) выглядит безумием.

Вы может имели ввиду 1 или 10 рейд? 10 сегодня нормально выглядит даже для домашнего хранилища вполне и поднимается несложно

Точно, что-то меня торкнуло. Конечно же я raid1 подразумевал.

Неявные? Windows 11? Ну я даже не знаю... С подключением, что ли?

Название статьи фактически обещает рассказать о том, что появилось именно в указанной версии, и отсутствует в предыдущих. Соответственно очень хочется спросить автора - а разве что-то из описанного появилось именно в Windows 11? Что недоступно пользователю с Windows 10?

НЛО прилетело и опубликовало эту надпись здесь

Не, не обещает :)

Смысл названия в том, что есть некий функционал в Винде, который точно работает на Win11

P.S. Отгадайте смысл фразы: "C какого сервера ты будешь забирать логи". Говоривший имел ввиду сервер к которому будут подключаться, или сервер который будет подключаться?

Представьте себе, вы наткнулись на статью: "неявные возможности мазератти-феррари-амг(выберите сами)...", а в статье будет написано: 4 колеса. Как, нормально?

Говоря о ссылках в Windows, практически любой пользователь первым делом вспомнит про файлы-ярлыки (*.lnk). Они очень удобны

Удивительно, но в M$ не сделали в ярлыках такую простую и очевидную вещь, как указание рабочего окружения (PATH и прочие переменные окружения). Поэтому, если нужно модифицировать окружение для конкретной программы, приходится делать bat-файл и уже на него ярлык.

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

Речь же про ярдыки - .lnk файлы.

В них то можно всё это было сделать, но у ms свой путь

Path там есть, см описание формата lnk.

Но остального нет.

Poweshell придумал какой то адский ИИ.

Poweshell придумал какой то адский ИИ.

Знаете, я много писал и пишу на bash, так вот. PowerShell по сравнению с bash это небо и земля. Не буду писать о всех фишках. Просто посмотрите как в PowerShell сделана передача параметров в функцию и скрипт.... никаких getops прочего ада.

Единственная фишка bash по сравнению с PS это в том, что интерпретатор маленький и работает везде.

P.S. И да, я в курсе что Bash это Linux, а PS это Windows :) Сравниваю их просто, как языки.

P.S. И да, я в курсе что Bash это Linux, а PS это Windows :)

Отнюдь

PS /> $PSVersionTable                              

Name                           Value
----                           -----
PSVersion                      7.5.4
PSEdition                      Core
GitCommitId                    7.5.4-0-g0
OS                             Gentoo Linux
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Винде есть нормальный jscript в wsh

deprecated, и критерии нормальности в студию!
Если будет выбор я выберу PowerShell. Он позволяет всё введённое в файле, ввести в командную строку и проверить работу кода.

Еще, я тут недавно экспериментировал с этим, расширенные атрибуты (в win7) мне создать так и не удалось (программно). А вот ADS прекрасно работают, в частности очень удобно для хранения тегов (жалко что инфраструктура "проводников" совершенно на это не рассчитана). В чем там разница я так и не понял (кроме ограничений по размеру). Возможно, предполагается что расширенные атрибуты копируются между разделами?

В Линуксе кстати файловых потоков нет, но есть расширенные атрибуты. Для хранения тегов особой разницы нет, 64К хватит каждому:)

MS старается изжить расширенные атрибуты всеми доступными способами, хотя сама активно их использует - парадокс.

По факту, альтернативные потоки существенно удобней расширенных атрибутов. Но Legacy - есть Legacy

Создание точек повторной обработки требует прав администратора

Если в настройках Windows включить режим разработчика (developer feature), то права администратора уже не будут требоваться.

Возможно, если вы напрямую вызываете API Windows функции из вашего кода это и работает. Но создание точки повторной обработки в виде символической ссылки:

New-Item -ItemType SymbolicLink ....

заканчивается провалом (New-Item : Administrator privilege required for this operation).

Для symlink'ов в локальных политиках безопасности есть отдельная настройка прав "Create symbolic links" внутри "User Rights Assignment".

Монументальный труд, без шуток. Добавлю что в гражданской жизни с VHD можно и грузиться, когда-то был ноут с матрешкой - Windows 8.1 как основная система и в ней VHD с Windows 10, все с единого загрузчика.

Списибо. Писал летом свой инкрементальный бэкап, пришлось в Винде поковыряться. Вот, чтоб пропадали наработки, решил поделиться с общественностью.

Для чистки дисков от альтернативных потоков использую утилиту streams от SysInternals. Обычно запускаю для поиска всех потоков, просматриваю результат, и если там ничего криминального (одни только Zone.Identifier от броузеров) то удаляю все разом. Ещё помню, что Касперский антивирус этим страдал, чтобы отмечать проканированные файлы. Может и другие антивирусы тоже.

Хотя слово "Directory" и иьеет вариант перевода на русский как "Каталог", но Directory и Catalog в ИТ имеют разное применение.

Возможно автор не в курсе использования слова Catalog на иных чем ч86 платформах поэтому использует Каталог в смысле Directory.

Вот в чем разница:

directory is a container for files and other directories, similar to a physical folder, used for organizing data on a computer. A catalog is a comprehensive inventory or a detailed list, used for searching and managing a collection of items, such as a library catalog or a data catalog. The main difference is that a directory's function is structural (a place to hold things), while a catalog's function is descriptive (an organized list to find things). 

Папка - вот правильный и непротиворечивый вариант перевода Directory на русский язык.

Для справки и общего развития добавлю что в системах на ИБМ мэйнфрэйм есть мощный, равитый механизм называемый System/User Catalog. Он существует с самых ранний версий, развивался и присутствует в новейших.

Ничего подобного ни в Windows ни в Linux нет и быть не может. К сожалению.

В тред врывается английское слово Folder. Его как тогда переводить будем? По устоявишмся сейчас канонам это вроде как и есть "Папка"

Я много раз обращал внимание на то что ИТ гиганты имеют явный комплекс неполноценности проявляющийся в том что они не могут себе позволить использование терминов введеных ихними конкурентами. И придумывают новые. Дошло до того что широко используются термины не имеющие никакого отношения к ИТ. Например "облако", "докер", "контейнер/bean", "rust", и множество других, любой сможет продолжить этот список.

Это очень не конструктивно, но помогает в конкурентной борьбе отвоевывать свои ниши. и заявлять о себе.

Kubernetes (K8s) переводится с греческого как "рулевой" или "штурман" (кормчий), 

А почему,например, не Workload Manager как это называеется, например, в z/OS?

Folder это папка, по сути называемого удачнее чем Directory переводимое на русский как каталог и полностью искажая смысл английского Catalog. Сравните:

cat·a·log

/ˈkadlˌôɡ,ˈkadlˌäɡ/

noun

  1. a complete list of items, typically one in alphabetical or other systematic order.

verb

  1. make a systematic list of (items of the same type).

    "it will be some time before the collection is fully cataloged"

di·rec·to·ry

/dəˈrekt(ə)rē,dīˈrekt(ə)rē/

noun

  1. 1.

    a book listing individuals or organizations alphabetically or thematically with details such as names, addresses, and phone numbers.

    "enter a keyword or browse the full business directory"

  2. 2.

    historical

    a book of directions for the conduct of Christian worship, especially in Presbyterian and Roman Catholic Churches.

Кстати в отличии от этих двух слов слово "folder" по сути гораздо ближе к тому что мы в ИТ имеем в виду:

fold·er

/ˈfōldər/

noun

  1. a folding cover or holder, typically made of stiff paper or cardboard, for storing loose papers (or files - zVlad909).

    "I took home a stack of papers and folders related to current projects".

Автор также использует термин "тома (volume)" в том метсе где в англоязычной документации по Unix/Linux ичпользуется термин "File System" или "Mounted File System".

Снова имеет место быть пересечение терминологии с ситема на ИБМ мэйнфрэйм, где термин "Volume" относится к физическому тому жестких дисков. Партиции на жестких дисках (томах) называются минидиски.

Мне никогда не встречался термин том(volume) в литературе по Unix или Linux. B разговорах со специалистами по этим ОС наблюдалось непонимание если я использовал этот термин. Приходилось давать дополнительные пояснения.

Что касаемо Hard Links то у них есть масса недостатков критикуемых во многих исследованиях. Например:

  • Confusion with File Identity: In Unix, the file name is just a pointer to the data's actual location (the inode). Hard links allow multiple names to point to the same inode. Critics argue this breaks the natural assumption that a file path is a unique identifier for that data.

  • "Spooky Action at a Distance": Modifying a file through one hard link changes the data for all other hard links, which can be unexpected for users who assume they are working with independent files.

  • Inability to Cross Filesystems/Link Directories: Hard links cannot link files across different storage devices or partitions, and generally cannot point to directories (to prevent infinite loops in the file system hierarchy). Symbolic links have no such restrictions.

  • Difficult to Manage and Audit: There is no easy way to find all other hard links to a specific file without scanning the entire file system for the matching inode number. This lack of discoverability makes management and auditing difficult.

  • Program Behavior Inconsistencies: Some programs modify files by opening them and writing new data (keeping the inode the same), while others write to a temporary file and then perform an atomic rename operation (which creates a new inode and breaks the hard link relationship). This inconsistent behavior can lead to data management issues for users relying on hard links to stay in sync.

  • Security Vulnerabilities: Symbolic links are more prone to race conditions where a malicious actor can swap the target of a symlink between an application checking permissions and actually accessing the file. While mitigations exist, this is a significant security concern. 

Изюминка в том, что Windows, в отличие от Linux, позволяет создавать символические ссылки не только на файлы и каталоги, но и на сетевые папки (SMB shares). 

На сапмом деле:

  • Symbolic Link: 

    A symbolic link is a separate file that contains the path to another file or directory. It acts as a pointer or shortcut, referencing the target by its name. 

Благо, есть гораздо более простое решение: использовать для указания путей не ключ «Path» (используемый по умолчанию), а ключ «LitteralPath», отключающий использование масок и обрабатывающий имя файла как оно есть.

cat -LiteralPath '[a-z]ook.txt'

В примере с обычным cat не было кавычек вообще, а с LiteralPath есть. Остались от примера с экранированием или без них не работает?

Просто выглядит так, что если уж буквально (literal) обрабатывать переданное имя, то и искать надо файл с кавычками в имени.

Это вы хорошо подсмотрели! Магия PS и LiteralPath состоит из двух актов:
1) Сначала PS должен разобрать строку вызова и понять, что является операндом (LiteralPath) и что является его значением значением. То есть решить задачу <LiteralPath> <Value>. Поскольку Value может быть странным, например, содержать пробелы, то для PS пользователь должен явно указать где его границы. Это делается с помощью одинарных или двойных кавычек. При этом если в теле Value тоже есть кавычки, то их надо экранировать, чтобы PS понял, что это внутренности и не закрыл границы Value
2) Выделенное Value PS передает в командлету, а тот в свою очередь видит, что используется ключ LiteralPath и соответственно не использует механизм масок для доступа к файлам.

Таким образом, без кавычек тоже работает.

Но если ваш файл будет содержать в имени кавычки, например, '[a-z]ook'.txt

То для доступа к нему нужно PS объяснить, что кавычки находятся в имени, а не являются частью вызова. Например, следующий код: cat -LiteralPath "'[a-z]ook'.txt" отработает верно.

Одиннадцать минусов на мои 4 комментария и ни одного слова в ответ. Странно.

Ну если настаиваете...

Directory и Catalog в ИТ имеют разное применение ........ Папка - вот правильный и непротиворечивый вариант перевода Directory на русский язык

Стало быть, Active Directory - Активная Папка, Novell eDirectory - еще одна служба папок, и так далее? Это будет новым словом в переводах. Де-факто устоявшийся перевод тут зависит от контекста.

Автор также использует термин "тома (volume)" в том месте где в англоязычной документации по Unix/Linux используется термин "File System" или "Mounted File System".

Нет, автор демонстрирует монтирование в папку раздела, находящегося на логическом томе. О какой-либо ФС на этом разделе вообще речи не идет.

Мне никогда не встречался термин том(volume) в литературе по Unix или Linux. B разговорах со специалистами по этим ОС наблюдалось непонимание если я использовал этот термин. 

Учитывая декларируемый вами опыт, это просто удивительно, потому что общедоступные источники нам подсказывают, что понятие Volume как логического дискового тома появилось не позднее конца 80-х в UNIX (AIX), откуда затем мигрировало в винду и линукс.

Стало быть, Active Directory - Активная Папка, Novell eDirectory - еще одна служба папок, и так далее? Это будет новым словом в переводах. Де-факто устоявшийся перевод тут зависит от контекста.

Статья эта не про Active Directory и другое что Вы упоминули для полемики. В случае этой статье, где речь идет о файловых системах, перевод Directory в Папка единственно приемлемый.

В случае с AC я сяитаю что Directory применено тоже не очень к месту. Но это уже другая история.

Учитывая декларируемый вами опыт, это просто удивительно, потому что общедоступные источники нам подсказывают, что понятие Volume как логического дискового тома появилось не позднее конца 80-х в UNIX (AIX), откуда затем мигрировало в винду и линукс.

Да я в курсе такого использования термина Volume (LVM, например), но там лучше бы подошло Storage Group.

Вообще с созданием терминов в области ОС х86 имеет место полный бардак. Имена и термины берутся с потолка и редко отражают суть того что обозначают.

Например команда "cron" - ошибочное написание греческого Chron - "время". Почему не "timer"?

Вообще с созданием терминов в области ОС х86 имеет место полный бардак. ... Например команда "cron"

Сron впервые появился в Unix V7 на PDP-11, на x86 в те времена о нем никто слыхом не слыхивал. У вас какое-то свое видение технологий, терминологии и хронологии их развития, явно отличное от того, что видят окружающие. Отсюда и минусы.

Сron впервые появился в Unix V7 на PDP-11, на x86 в те времена о нем никто слыхом не слыхивал. У вас какое-то свое видение технологий, терминологии и хронологии их развития, явно отличное от того, что видят окружающие. Отсюда и минусы.

Когда и где появилась команда "cron" мне ведомо.

Не понятно причем здесь хронология (Chronology). Потому что в примере я сослался на команду "cron"?

Я в основном про неудачные переводы английских терминов на русский говорю. Неудачные переводы затрудняют понимание материала читающими к которым адресуется статья номинированная как "tutorial".

Да нет. Вовсе не в том что Вы говорите дело. У меня вполне таки нормальное видение. А за терминологию я борюсь всю свою жизнь в ИТ.

Согласен что оно отличается от видения окружающих здесь на Хабре. Но не везде.

Я имею в виду средний возраст и бэкграунд большенства хабровцев. Это довольно молодые люди с бэкгораундом ограниченным Windows и Linux (редко Unix).

Мне же довелось в большей степени работать в иных чем Windows и Linux, хотя и в этих предостьаточно, ОС. И в тех, иных, ОС с этим было и есть больше порядка и логичности в использовании названий тем или иным технологиям. В определенное время эти названия считались стандартом.

В настоящее время названия технологиям даются по принципу чтобы это не совпадало ни с чьим иным названием такой же, по сути, технологии. Или функциональности. Это сильно дурачит головы молодожи в ИТ. Но зачастую они даже не могут это осознать.

Минусы без комментарий это как плевок в спину.

Спасибо за содержательную беседу. .

Всем доброго здоровья! Насколько я помню опция "Выполнить" запускается уже с правами администратора, а статья супер кое-что я даже не знал. Спасибо!!!

Мне как обычному пользаку недавно довелось создать виртуальный диск. Вот это полезная тема. Можно в него спрятать файлы и запаролить Битлокером.

Статья начиналась многообещающей, скрытые функции винды... А в итоге набор непонятно чего и непонятно зачем. Уважаемый автор , предоставьте себе,что перед Вами находится начинающий программист, с задатками великих свершений. И вот Вы начинаете его грузить много ходовой тяжёлой и не удобоваримый информацией. Начинаете заманчиво, а заканчиваете ....я лично так и не понял о чём статья, о вреде или о виртуале? Спасибо .

Ну всё, позабыта ZFS. Ставлю винду!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds