Как преобразовать fat32 в ntfs без потери данных

Сейчас преобразуем диск fat32 в ntfs так, чтоб все файлы на нём остались на месте. Делать всё будем в Windows 7.

  1. Если на диске есть очень важные данные, то лучше для профилактики сделать их копию на другой диск
  2. Запускаем коммандную строку с правами администратора (можно в меню «Пуск» написать CMD)
  3. Вводим в открывшееся чёрное окно следующую команду буква_диска — это буква диска, подлежащего преобразованию: convert буква_диска: /fs:ntfs, в моём случае получилось convert h: /fs:ntfs
  4. Ждём окончания, если всё прошло хорошо, то получим диск NTFS со всеми файлами, которые на нём лежали.

Все должно выглядеть примерно так:

C:\Windows\system32>convert h: /fs:ntfs

Тип файловой системы: FAT32.

Введите метку тома для диска H: WD

Том VERBATIM HD создан 06.07.2011 12:18

Серийный номер тома: 165C-2F82

Проверка файлов и папок...

Проверка файлов и папок завершена.

Windows проверила файловую систему. Ошибок не обнаружено.

  488 262 240 КБ всего на диске.

       11 072 КБ в 130 скрытых файлах.

       37 472 КБ в 1 169 папках.

   40 948 512 КБ в 6 961 файлах.

  447 265 152 КБ доступно.

 

       32 768 байт в каждом кластере.

Всего кластеров на диске:       15 258 195.

   13 977 036 кластеров на диске.

 

Оценка места на диске, необходимого для преобразования файловой системы...

Всего на диске:                488381462 КБ

Свободно:                      447265152 КБ

Необходимо для преобразования:   683668 КБ

Преобразование файловой системы

Преобразование завершено

 

C:\Windows\system32>

Что значит Ex: -536805376 и 268435456 в выводе Get-ACL

Нашёл здесь

PS > [system.enum]::getvalues([System.Security.AccessControl.FileSystemRights]) | %{$_.value__} | measure -sum

Count : 23
Average :
Sum : 4524076
Maximum :
Minimum :
Property :

Это где-то в хедерах винды:

winnt.h contains:

#define DELETE    (0x00010000L)
#define READ_CONTROL   (0x00020000L)
#define WRITE_DAC   (0x00040000L)
#define WRITE_OWNER   (0x00080000L)
#define SYNCHRONIZE   (0x00100000L)

#define STANDARD_RIGHTS_REQUIRED  (0x000F0000L)

#define STANDARD_RIGHTS_ALL  (0x001F0000L)

#define SPECIFIC_RIGHTS_ALL  (0x0000FFFFL)

#define ACCESS_SYSTEM_SECURITY  (0x01000000L)

#define MAXIMUM_ALLOWED   (0x02000000L)

#define GENERIC_READ   (0x80000000L)
#define GENERIC_WRITE   (0x40000000L)
#define GENERIC_EXECUTE   (0x20000000L)
#define GENERIC_ALL   (0x10000000L)

Итого у наших цифр получается следующий смысл:

PS > 0x80000000 -bor 0x40000000 -bor 0x20000000 -bor 0x0001000

-536805376 

268435456   - FullControl
-536805376  - Modify, Synchronize
-1610612736 - ReadAndExecute, Synchronize

 

 

$Permission = [System.Security.AccessControl.FileSystemRights]»Modify, Synchronize»

.bat скрипт для перезаписи свободного места на диске NTFS

@echo off
mkdir "c:\tempclean"
copy .\tmp.txt c:\tempclean\tmp.txt
cd "c:\tempclean"
:A
type "c:\tempclean\tmp.txt" >> c:\tempclean\clean.txt
rem echo "fjhfghj" >> clean.txt
rem pause
goto :A

где tmp.txt – текстовый файл с мусором (типа шаблон), которым будет набиваться диск, рекомендую делать 10-20 Мб

clean.txt – оооооочень большой файл, который собой всё свободное место нафиг перетрёт, создаётся по ходу работы скрипта

Вместо c: надо указывать тот диск, который надо вычистить

Скрипт не подойдёт для FAT32 из-за ограничения на максимальный размер файла в 4 Гб

Копирование прав на папки через powershell

Первая строка запоминает права ntfs на настроенную папку, вторая — делает такие же права на другую.

$acl = Get-Acl -Path .\Path1
Set-Acl .\Path2 $acl

Более навороченный вариант с модификацией прав: http://social.technet.microsoft.com/Forums/ru-RU/scrlangru/thread/74f32d78-3815-4fe0-9f3d-20c0d99c9dc4/