среда, 15 мая 2019 г.

Windows: Установка принтера по умолчанию через реестр

Чтобы указать принтер, используемый по умолчанию, не через папку "Устройства и принтеры", а через реестр, надо сделать следующее:

1. Посмотреть доступные принтеры в разделе:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices

2. Поправить параметр:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device
(он должен выглядеть примерно так: "myPrinter,winspool,Ne03:")

Говорят, еще можно это сделать из командной строки:
rundll32 printui.dll,PrintUIEntry /y /q /n "myPrinter"

Литература:

https://helpdesk.win2pdf.com/index.php?/Knowledgebase/Article/View/63/0/set-default-printer-from-registry

воскресенье, 28 апреля 2019 г.

Windows 2008: Hyper-V и дилетанты

Предположим, возникла ситуация: жил-был Windows2008-сервер с Hyper-V, на котором работала виртуальная машина, и этот сервер в один не очень прекрасный момент приказал долго жить. К счастью, виртуальная машина лежала на отдельном диске и не пострадала. Возникает две задачи: 1) как добраться до файлов на виртуальном жестком диске и 2) как эту виртуальную машину поднять на другом сервере?

Тут надо сделать небольшой экскурс в структуру файлов, в которых хранится виртуальная машина (пусть её имя QUQU). Выглядит эта структура примерно так:
C:
└─ProgramData
  └─Microsoft
    └─Windows
      └─Hyper-V
        ├─Snapshots
        │ └─22222222-2222-2222-2222-222222222222.xml   <- символическая ссылка на конфигурацию фотографии ВМ
        └─Virtual Machines
          └─11111111-1111-1111-1111-11111111111.xml    <- символическая ссылка на конфигурацию ВМ
...
D:                                                     <- диск для хранения виртуальных машин
└─QUQU
  ├─Snapshots                                          <- папка для хранения фотографий ВМ
  │ ├─22222222-2222-2222-2222-222222222222             <- фотография виртуальной машины
  │ │ ├─22222222-2222-2222-2222-222222222222.bin
  │ │ └─22222222-2222-2222-2222-222222222222.vsv
  │ └─22222222-2222-2222-2222-222222222222.xml         <- конфигурация фотографии ВМ
  ├─Virtual Machines
  │ ├─11111111-1111-1111-1111-11111111111              <- пустая папка, не знаю, зачем
  │ └─11111111-1111-1111-1111-11111111111.xml          <- конфигурация ВМ
  ├─QUQU-c.vhd                                         <- образ диска С: виртуальной машины
  └─QUQU-c_33333333-3333-3333-3333-333333333333.avhd   <- изменения на диске С: виртуальной машины

Насколько я понял, система функционирует следующим образом. До создания фотографий виртуальная машина работает с образом диска - файлом QUQU-c.vhd. При создании фотографии этот файл "замораживается", и создается файл *.avhd, в котором накапливаются дифференциальные изменения диска С: виртуальной машины. И так далее.

Таким образом, чтобы можно было добраться до файлов виртуальной машины, надо как-то скомбинировать файлы дифференциальных накоплений и исходного состояния диска С: виртуальной машины. Говорят, штатным образом это как-то делатся на сервере в гипервизоре Hyper-V, но и без гипервизора можно обойтись.

Оказывается, к решению первой задачи (доступ к файлам ВМ) приводит следующая последовательность действий:

1. Чтобы не порушить структуру ВМ, копируем все QUQU-c.vhd и QUQU-c_33333333-3333-3333-3333-333333333333.avhd в какую-нибудь папку (например, D:\temp)

2. Запускаем с правами администратора утилиту DISKPART.

3. В командной строке diskpart-а выполняем команду:
select vdisk file=D:\temp\QUQU-c_33333333-3333-3333-3333-333333333333.avhd
эта команда нацелит diskpart на последний файл дифференциального накопления.

4. В командной строке diskpart-а выполняем команду:
merge vdisk depth=1
эта команда скомбинирует файлы дифференциального накопления (тут у нас один файл, поэтому depth=1) с исходным файлом и выдаст в QUQU-c.vhd самый свежий образ диска C: виртуальной машины.

5. Этот образ при помощи оснастки "Управление дисками" (например, так: с правами администратора команда mmc -> меню "Файл" - > пункт "Добавить или удалить оснастку...") подцепляем к системе: меню "Действие" -> пункт "Присоединить виртуальный жесткий диск".

Вторая задача (по переносу виртуальной машины) решается тоже несложно:

1. Останавливаем сервис Hyper-V:
net stop vmms

2. Создаём символические ссылки на конфигурацию виртуальной машины и всех её фотографий в рабочей папке Hyper-V нового сервера:
mklink "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\11111111-1111-1111-1111-11111111111.xml" "D:\QUQU\Virtual Machines\11111111-1111-1111-1111-11111111111.xml"

mklink "C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\22222222-2222-2222-2222-222222222222.xml" "D:\QUQU\Snapshots\22222222-2222-2222-2222-222222222222.xml"

3. Раздаём этим символическим ссылкам нужные права:
icacls "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\11111111-1111-1111-1111-11111111111.xml" /grant "ВИРТУАЛЬНАЯ МАШИНА NT\11111111-1111-1111-1111-11111111111":F /T /L

icacls "C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\22222222-2222-2222-2222-222222222222.xml" /grant "ВИРТУАЛЬНАЯ МАШИНА NT\11111111-1111-1111-1111-11111111111":F /T /L
(если операционная система англоязычная, то "ВИРТУАЛЬНАЯ МАШИНА NT" меняем на "NT VIRTUAL MACHINE").

4. Запускаем сервис Hyper-V:
net start vmms
и отправляемся настраивать сетевые адаптеры на восстановленной виртуальной машине.

Литература:

http://itexpertclub.blogspot.com/2015/02/how-to-merge-vhd-and-avdh-files-using.html

http://pyatilistnik.org/kak-vosstanovit-virtualnyie-mashinyi-hyper-v-pri-kopirovanii-na-drugoy-host-v-windows-server-2008r2/

http://forum.oszone.net/thread-214658.html

четверг, 6 декабря 2018 г.

Google-таблицы: вставка изображения в ячейку

Оказывается, в Google-таблицах есть такая прикольная функция, как =IMAGE(url).
Она позволяет внутрь ячейки внедрить изображение, причём это изображение может масштабироваться по мере изменения размера ячейки. Единственная проблема: как запихнуть туда изображение не из интернета, а, скажем, с рабочего стола.

Оказывается, есть способ. Нужно:

а) Положить изображение на Google-диск.

б) Дать этому изображению доступ всем пользователям по ссылке. При этом получится некий урл примерно такого вида:
https://drive.google.com/file/d/1234567890abcdefghijklmnopqrstuvw/view?usp=sharing
в нем ценность представляет ключ 1234567890abcdefghijklmnopqrstuvw.

в) Этот ключ вставить в новый урл:
http://drive.google.com/uc?id=1234567890abcdefghijklmnopqrstuvw

г) И уже этот урл скормить функции IMAGE:
=IMAGE("http://drive.google.com/uc?id=1234567890abcdefghijklmnopqrstuvw")

Литература:

Insert an image from Drive in a cell on google sheets - How To

суббота, 18 августа 2018 г.

Debian: ошибка в работе жесткого диска Seagate

Посыпался WD Caviar Green 1.5Tb. Не такой уж старый - девять лет всего - а вот поди ж ты. Ну, посыпался - и бог с ним, говорят, это у них часто бывает. Пришлось купить на замену Seagate 2Tb IronWolf. Пять месяцев отработал без нареканий, а потом началось. Бывает, смотришь, а точка монтирования пустая - диск отвалился. В логах (по команде dmesg) высыпается такой набор:
[549201.794807] Buffer I/O error on device sdd1, logical block 225329999
[549201.794811] EXT4-fs warning (device sdd1): ext4_end_bio:250: I/O error -5 writing to inode 37618358 (offset 45134135296 size 49152 starting block 225330256)
[549201.801653] EXT4-fs error (device sdd1): ext4_journal_start_sb:327: Detected aborted journal
[549201.801659] EXT4-fs (sdd1): Remounting filesystem read-only
[549201.801662] EXT4-fs (sdd1): previous I/O error to superblock detected
[549201.801673] EXT4-fs (sdd1): ext4_da_writepages: jbd2_start: 9223372036854775807 pages, ino 37618358; err -30
[549201.805986] sd 5:0:0:0: [sdd] Synchronizing SCSI cache
[549202.047724] ata6: SATA link down (SStatus 0 SControl 310)
[549202.047732] ata6.00: link offline, clearing class 1 to NONE
[549202.047740] ata6: EH complete
[549202.047782] sd 5:0:0:0: [sdd]  Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[549202.047786] sd 5:0:0:0: [sdd] Stopping disk
[549202.047794] sd 5:0:0:0: [sdd] START_STOP FAILED
[549202.047796] sd 5:0:0:0: [sdd]  Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[549202.066818] ata6: exception Emask 0x10 SAct 0x0 SErr 0x4040000 action 0xe frozen
[549202.066823] ata6: irq_stat 0x00000040, connection status changed
[549202.066826] ata6: SError: { CommWake DevExch }
[549202.066836] ata6: limiting SATA link speed to 1.5 Gbps
[549202.066840] ata6: hard resetting link
[549202.843166] ata6: SATA link down (SStatus 0 SControl 310)
[549202.843174] ata6.00: link offline, clearing class 1 to NONE
[549202.843182] ata6: EH complete
[549202.865848] ata6: exception Emask 0x10 SAct 0x0 SErr 0x4040000 action 0xe frozen
[549202.865853] ata6: irq_stat 0x00000040, connection status changed
[549202.865857] ata6: SError: { CommWake DevExch }
[549202.865866] ata6: limiting SATA link speed to 1.5 Gbps
[549202.865869] ata6: hard resetting link
[549203.642603] ata6: SATA link down (SStatus 0 SControl 310)
[549203.642611] ata6.00: link offline, clearing class 1 to NONE
[549203.642619] ata6: EH complete
Что к чему - непонятно. Диск вроде живой, перемонтируешь его или комп перезагрузишь - и опять работает. Наконец, ошибки стали появляться слишком часто, поэтому полез гуглить.

Знающие люди говорят, что, возможно, это потому что диск - sata3, а материнская плата - sata. Т.е., у сигейта такие хитрые настройки или таймауты, что линукс считает, что диск отвалился, и выдает ошибку. Понятных мне варианта решения два: заменить диск или прописать в /etc/default/grub такую опцию:
GRUB_CMDLINE_LINUX="libata.force=1.5Gbps"
и выполнить команду update-grub.

Прописал, выполнил, перезагрузился. Уже больше суток не отваливается. Будем надеяться, помогло.

UPD 2018-08-28: Не помогло. Следующий вариант - отключить кэширование записи на диск:
hdparm -W0 /dev/sdd
Куда деваться, попробую его. Попутно узнал команды lspci (показывает контроллеры) и hdparm -I /dev/sdd (показывает много всякой интересной информации о диске).

UPD 2019-07-24: Как-то этот костыль худо-бедно работал, а сегодня пришлось отключить компьютер на пару часов, и... И обратно система не поднялась - завалила экран ошибками диска на этапе загрузки. С испугу купил новый диск, и тут выяснилось, что новый, хоть и другая модель, но ведёт себя точно так же. Помогло перетыкание питания - просто один пучок проводков, идущий от БП, заменил на другой. Так что, возможно, все эти ошибки - результат того, что что-то неладно с питанием. Похоже, не диски надо было мучить, а элементарно поставить новый блок питания.

Литература

Disk IO errors on all sata disks, disks dropped out
Ubuntu Freeze Issue After SSD Upgrade
[ubuntu] Problems with the new Seagate 1.5TB hard drives

понедельник, 13 августа 2018 г.

Отключить HSTS

Оказывается, есть на свете такой механизм: HSTS (HTTP Strict Transport Security). Эта штука препятствует работе с сервером, сертификат которого не удовлетворяет определенным требованиям безопасности, однако, иногда такая забота мешает жить.

Это можно исправить, попросив браузер забыть проблемный сайт. Тогда при следующей попытке входа на проблемный сайт браузер выдаст предупреждение, но позволит продолжить работу.

Чтобы браузер забыл настройки HSTS для сайта, нужно:

а) в Google Chrome перейти по ссылке chrome://net-internals/#hsts, в разделе Delete domain ввести адрес сайта и нажать кнопку Delete.

б) в Mozilla FireFox зайти в журнал просмотренных страниц, на нужном адресе правым кликом мыши вызвать контекстное меню, в котором выбрать последний пункт "Забыть об этом сайте".

Литература
Here’s how to disable HSTS settings in Chrome & Firefox

понедельник, 6 августа 2018 г.

Для взлома шифра Цезаря

S = "Кгылчусеюегм ефб лрчсупгщлб"

S = S.upper()

chars = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
for i in range(0, len(chars)):
    print(i, "".join(chars[(chars.find(s) + i)%len(chars)] if chars.find(s) >= 0 else s for s in S))

можно было, конечно, и так:
for i in range(0, 33):
    print("".join(chr(ord('А')+(ord(s)-ord('А')+i)%(ord('Я')-ord('А')+1)) if ord(s) in range(ord('А'),ord('Я')+1) else s for s in S))
но вдруг набор символов слегка отличается от привычного?

пятница, 3 августа 2018 г.

Windows 7: повторно подключить к домену

Одна рабочая станция под управлением Windows 7 начала при попытке авторизоваться выдавать следующее: "База данных диспетчера учетных записей на сервере не содержит записи для регистрации компьютера через доверительные отношения с этой рабочей станцией". Оказалось, что какой-то злодей снёс учетную запись компьютера в Active Directory. Ситуация осложнилась тем, что доменными политиками отключена учетная запись локального администратора.

К счастью, удалось прицепиться под доменной админской учетной записью (один из админов когда-то входил в этот компьютер за какой-то своей надобностью, и локальный профиль сохранился). Дальше поступили как в случае с Windows XP. Единственная тонкость: команду netdom remove пришлось выполнить с ключом /Force, чтобы рабочая станция осознала, что она уже не в домене.
netdom remove myWS /Domain:myDOMAIN /UserD:myDOMAIN\Admin /PasswordD:*** /Force
netdom join myWS /Domain:myDOMAIN /UserD:myDOMAIN\Admin /PasswordD:***