Резервное копирование жесткого диска в Ubuntu

Обычно использую утилиту dd, которая есть в каждом дистрибутиве в «Базе».

Создание образа:

dd if=/dev/sdb2 of=/mnt/backup/iso_main_hard/hard_main.dd bs=1M conv=noerror

Если хочется жать в архив:

dd if=/dev/sdb2  bs=1M conv=noerror | bzip2 -c > /mnt/backup/hard.dd.zip

Извлечение:

bzcat hard_main.dd.zip | dd of=/dev/sdb2

Утилита dd, в консоль во время работы ничего не пишет, но есть трюк как «показать»:

sudo watch -n10 killall -SIGUSR1 dd

Миграция с VirtualBox на KVM (UBUNTU)

Причина: KVM более производительный чем VirtualBox. В моём случае все обошлось довольно просто:

1) Ставим KVM

sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils virt-manager

2) Конвертируем виртуальные машины Virtualbox в формат KVM. Например так:

VBoxManage clonehd --format RAW win764.vdi win764.img
qemu-img convert -f raw win764.img -O qcow2 win764.qcow2

3) Запускаем KVM virt-manager и подключаем диск. У меня всё заработало с первого раза.

Функция «посмотреть пароль» на сайте

Иногда бывает полезно раскрыть «звездочки» в теле тэга input при типе равном password. Вообще javascript не позволяет заменять тип «на лету» (например на text), но! как всегда это ограничение можно достаточно просто обойти — просто удалим обьект input и заменим его другим. Например как-то так:

           <div id="input_pass_div">
                <input type="password" id="password_login_form" class="form-control input-shadow" placeholder="Пароль">
            </div>
            <div class="form-control-position">
                <i style="cursor: pointer" onclick="ShowPassMe()" class="icon-eye"></i>
            </div>
<script>     
    tgpass=false;
    function ShowPassMe(){ 
       ps=$("#password_login_form").val();
       $("#password_login_form").remove();  
       if (tgpass==false){
         $("#input_pass_div").html('<input type="text" id="password_login_form" class="form-control input-shadow" placeholder="Пароль">');
         tgpass=!tgpass;
       } else {
           tgpass=!tgpass;
           $("#input_pass_div").html('<input type="password" id="password_login_form" class="form-control input-shadow" placeholder="Пароль">');
       };
       $("#password_login_form").val(ps);
    };    
</script>

Снижения приоритета для определенных процессов в Windows

Ситуация: сервер RDP, где люди работают в 1С. Часть пользователей к сожалению не удается переубедить НЕ пользоваться браузерами на удаленном рабочем столе, в результате иногда получаются ситуации что процессор забит на 100% из-за открытых firefox и chrome в ущерб работе непосредственно 1С.

Выход: принудительное понижение приоритета выполнения браузеров при помощи скрипта PowerShell

Скрипт prior.ps1:

#PowerShell
function set-ProcessPriority { 
    param($processName = $(throw "Enter process name"), $priority = "Normal")
    get-process -processname $processname | foreach { $_.PriorityClass = $priority }
    write-host "`"$($processName)`"'s priority is set to `"$($priority)`""
}

set-ProcessPriority chrome BelowNormal
set-ProcessPriority firefox BelowNormal
set-ProcessPriority sbis3plugin BelowNormal
Start-Sleep -Seconds 3

Для того, чтобы он без проблемно выполнялся через планировщик заданий, так-же необходимо задать групповые политики для PowerShell

 

Прогрессбар на vue.js

Например можно реализовать как-то так (в примере на самом деле два прогрессбара). К сожалению всёж пока выходит сложнее для чтения и понимания чем «чистый» javascript+jquery

        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>        
</head>
<body>
    <table id="hotels_list"></table>
    <div id="hotels_pager"></div>  
    <div id="app">
        <div class="container">
            <div class="row">
                    <div class="col-6">      
                        <persent v-bind:msg="pers1"></persent>
                    </div>
                    <div class="col-6">    
                        <persent v-bind:msg="pers2"></persent>
                    </div>                
            </div>    
        </div>                
    </div>
<script>    
Vue.component('persent', {
    props: ['msg'],
    template: '<div><div>{{ msg.txt }}</div><div class="progress"><div class="progress-bar" role="progressbar" :style="msg.style" :aria-valuenow="msg.value" aria-valuemin="0" aria-valuemax="100">{{ msg.value }}%</div></div></div>'
});      
var app = new Vue({
  el: '#app',
  data: {
    timing: null,
    pers1 : {
        value: 10,
        txt:'Добавление новых',
        style:'width:20%'
    },
    pers2 : {
        value: 70,
        txt:'Обновление',
        style:'width:70%'
    }
  },
  mounted(){
    console.log("-загрузились полностью..");  
    this.runTiming();
  },
  methods: {
      runTiming() {
        this.timing = setInterval(this.changeCurrentPers, 2000)          
      },
      changeCurrentPers(){
         vl=this;
        $.post('progress.txt',{}, function(data){                          
                vl.pers1.value=data;
                vl.pers1.style='width:'+data+'%';
        });       
        $.post('progress_update.txt',{}, function(data){
                vl.pers2.value=data;
                vl.pers2.style='width:'+data+'%';
        });                 
      }
  },  
});

Всё ищу, гдеб его (VUE.js)  можно применить.. Пока выходит «надумано»..