рджреВрд░рд╕реНрде рд╡реГрджреНрдзрд┐рд╢реАрд▓ ZFS рдмреИрдХрдЕрдкред рдХрд╣реАрдВ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ

рдЕрдкрдиреЗ рднрд╛рдИ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВ, рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВ ...


ZFS 0.8 рдореЗрдВ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЗ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╕реНрдиреИрдкрд╢реЙрдЯ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рд░рдгреА рд╣реЛрдиреЗ рдкрд░, рдЖрдк рджреВрд░рд╕реНрде рдкрд░рд┐рд╕рд░ рдХреЗ рдорд╛рд▓рд┐рдХ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░рддреЗ рд╣реБрдП, рд░рд┐рдореЛрдЯ рдорд╢реАрди рдкрд░ рдЗрд╕рдХреА рдПрдХ рдорд┐рд░рд░ рдХреЙрдкреА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдВрдЬреА рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкрд░рд┐рд╕рд░ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЗрдВрдЯ (рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕) рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд░реНрд╡рд░ рд░реВрдо рдирд╣реАрдВ рд╣реИрдВ, рдЕрдЧрд░ рдЖрдЧ рд╡рд╣рд╛рдВ рдЖрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдЯрд╛рд░ред рдЦрддрд░рдирд╛рдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдЕрдкрдиреЗ рд╕рд╣рдХрд░реНрдореА рдХреЗ рд╕рд╛рде рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдбрд░ рдХреЗ рдПрдХ-рджреВрд╕рд░реЗ рдХрд╛ рдмреАрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ рднреА рд╕реЗрд╡рд╛ рдкреНрд░реЛрдХреНрд╕рдореЙрдХреНрд╕ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ ZFS рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рд░рд┐рдореЛрдЯ рдХреЙрдкреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛ред рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдПрдХ рджрд┐рди, рдирд┐рд░рд╛рд╢рд╛ рдореЗрдВ рдЧрд┐рд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХ рджреВрд░рджрд░рд╛рдЬ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЛрд╣реЗ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЙрдард╛рдПрдВрдЧреЗ рдФрд░ рдЕрдЪреНрдЫреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдореЗрдВ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдПрдВрдЧреЗред рдореИрдВрдиреЗ рд▓рдЧрднрдЧ 2 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреА рд▓рдЧрднрдЧ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ Proxmox рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдХреЛрдИ рдкрдЫрддрд╛рд╡рд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред ZFS рдкрд░, рдореЗрд░реЗ рдкрд╛рд╕ 30 рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ рд╣реИ, рдЬреЛ рдкрддрд▓реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ (рдЬреЛ рдХрд┐ 30 рдкреВрд░реНрдг рдиреМрдХрд░рд┐рдпреЛрдВ) рд╕реЗ рдмрдВрдзрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдЕрдВрддрд┐рдо x рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдиреИрдкрд╢реЙрдЯ рднреА рд╣реЛрдВрдЧреЗред

рд╣рд╛рдВ, рдЖрдк zfs рдХреЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕реЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдЦреЛ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЦреБрдж рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреАрдордд рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдерд╛ред

рдЯрд╛рд░ рдХрд╛ рдПрдХ рдЪрдореНрдордЪ


рдЯреИрдХрд▓ рдореЗрдВ рдЖрдк рддреБрд░рдВрдд рдорд░рд╣рдо рдореЗрдВ рдЙрдбрд╝ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рд╛рдВ, ZFS рдзреАрдорд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд fs рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рдбрд┐рд╕реНрдХ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдбрд┐рд╕реНрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдбрд┐рд╕реНрдХ рдХреЛ рдЕрдзрд┐рдорд╛рдирддрдГ рдПрд╕рдПрдПрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдПрдЪрдмреАрдП рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдПрдХрд▓ рдбрд┐рд╕реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ raid0 рдирд╣реАрдВ), рдИрд╕реАрд╕реА рд░реИрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рдХрдИ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдПрд╕рдПрд╕рдбреА (рдмреЗрд╣рддрд░ рдкреАрд╕реАрдЖрдИ-рдИ) рджреВрд╕рд░реЗ рд╕реНрддрд░ (рдЫреЛрдЯреЗ, 64 рд╕реЗ рдЧрд┐рдЧреНрд╕) рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЬреЗрдбрдЖрдИрдПрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд╕рдПрд╕рдбреА рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдорд╛рдирддрдГ рдПрдордПрд▓рд╕реАред

рдПрд╕рдПрд╕рдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрди рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдФрд░ 128 рдХреЗ 2 рдкреАрд╕реАрдЖрдИ-рдИ рдПрд╕рдПрд╕рдбреА рдЦрд░реАрджреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ 16 рдЧрд┐рдЧреНрд╕ рдФрд░ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ ZIL рдореЗрдВ рджреЛ 16 рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд╡рд┐рднрд╛рдЬрди рджрд░реНрдкрдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдФрд░ рд╢реЗрд╖ рднрд╛рдЧреЛрдВ рдХреЛ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдХреЗ рдХреИрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдзрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред Zfs рдХреА рджрдпрд╛ рдкрд░ рдУрдкреЗрд░рд╛ рдХреЗ 16 рдЧрд┐рдЧреНрд╕ рджрд┐рдПред (рдИрдмреЗ рдХреЗ рд╕рд╛рде рдЦрд░реАрджреА рдЧрдИ рдорд╛рдБ рдкрд░ рдПрдХ рд╕реНрд▓реЙрдЯ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛; рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛, рддреЛ рдпрд╣ 32 рджреЗрддрд╛ред)

zfskeeper.sh


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рджреЛрдиреЛрдВ рд╕рд┐рд░реЛрдВ рдкрд░ рд╕реНрдиреИрдк рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдЧрддрд┐ рдирд┐рдпрдВрддреНрд░рдгред рдореЗрд░реЗ рд╣рд╛рде рдореЗрдВ рдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдореЗрдВ рд╕реЗ, рдРрд╕реА рдХреЛрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдирд╣реАрдВ рдереАрдВ рдЬреЛ рдореБрдЭреЗ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреАрдВред рдиреАрдЪреЗ рдореИрдВ рдХреБрдЫ рдРрд╕реА рд▓рд┐рдкрд┐рдпрд╛рдБ рджреВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдереАред рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдиреЗ send_error_to_mail () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдкрдиреЗ zfskeeper.sh

рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдмрджрд▓реЗрдВ, рдЖрдкрдХреЛ
zfskeeper.sh рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдпрд╣ рдЖрдкрдХреЛ рддреИрдпрд╛рд░реА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдЕрдиреБрд╢рдВрд╕рд┐рдд)
zfskeeper.sh рдмреИрдВрдХ / рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб / рд╕рдмрд╡реЛрд▓-100-рдбрд┐рд╕реНрдХ-рдбреЗ -100 рдмрддрд╛рдПрдЧрд╛ред 10 рд╡рд░реНрддрдорд╛рди рд╕реНрдиреИрдкрд╢реЙрдЯ рд▓реЗрдЧрд╛ рдФрд░ рдЕрдВрддрд┐рдо 10 рд╕реНрдиреИрдкрд╢реЙрдЯ
zfskeeper.sh рдмреИрдВрдХ / рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб / рд╕рдмрд╡реЛрд▓ -100-рдбрд┐рд╕реНрдХ -режреж 10 рд░рд┐рдореЛрдЯрд╣реЙрд╕реНрдЯ 22 10 рдореА рд░реЗрдкреНрд▓рд┐рдХреЗрдЯрд░ рдмреИрдВрдХ / рдЖрд░рдЯреАрдПрд▓ / рд╕рдмрд╡реЛрд▓ -100-рдбрд┐рд╕реНрдХ-0 20 рдЫреЛрдбрд╝ рджреЗрдЧрд╛рд░рд┐рдореЛрдЯрд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рднреЗрдЬреЗрдВ: 22 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рддрд╣рдд 10 рдПрдордмреА / рдПрд╕ рддрдХ рдХреА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдФрд░ 10 рддрд╕реНрд╡реАрд░реЗрдВ рд╕реНрд░реЛрдд рдкрд░ рдФрд░ 20 рд╣реЛрд╕реНрдЯ рд╣реЛрд╕реНрдЯ
zfskeeper.sh рдмреИрдВрдХ / рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб / рд╕рдмрд╡реЛрд▓ -100-рдбрд┐рд╕реНрдХ -0 10 рд░рд┐рдореЛрдЯрд╣рд╛рдЗрд╕реНрдЯ 22 10 рдореАрдЯрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдмреИрдВрдХ / рдЖрд░рдЯреАрдПрд▓ / рд╕рдмрд╡реЛрд▓ рдкрд░ рдЫреЛрдбрд╝ рджреЗрдВред -100-рдбрд┐рд╕реНрдХ-0 20-рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

#!/bin/bash

zpool=$1
lsnaps=$2

ip=$3
port=$4
speedl=$5
remoteuser=$6
backpool=$7
rsnaps=$8
sendargs=$9

ZFSLOGDIR=~/zfskeeplogs
if [ ! -d "$ZFSLOGDIR" ]; then
    mkdir -p $ZFSLOGDIR
fi

NAMESNAP=`date "+%Y_%m_%d_%T"|sed s/:/_/g`
logfile=$ZFSLOGDIR/$NAMESNAP.log

write_to_log ()
{
echo `date +"%T"`" $1" >> $logfile
}

log_last_command ()
{
if [ $? -ne 0 ]; then
	    write_to_log "$1 FAILED."
	    if [ $2 = true ]; then
		write_to_log "Script execution stops"
		send_error_to_mail "$1" "$?" "$*"
		exit 1
	    fi
	else
	    write_to_log "$1 COMPLETED."
	fi
}

send_error_to_mail ()
{

Subject=`hostname`" ZFS backup $zpool missing"
swaks --header "Subject: $Subject" --to admin@mydomain.ru --from "alertbot@mydomain.ru" -a LOGIN -au alertbot@mydomain.ru -ap ailPass --server mail.mydomain.ru -tls --body \
"$Subject
command: zfskeeper.sh $3

    $1
    $2" \
    --attach $logfile
#    --attach-type "$(get_mimetype $logfile)" --attach $logfile

}

case "$#" in
    1)
    case "$1" in
	prepare)
    echo "
    Sender mashine:
    apt install swaks mbuffer
    useradd -s /bin/bash replicator
    mkdir -p /home/replicator 
    chown replicator:replicator /home/replicator
    zfs allow -u replicator send,snapshot,destroy,mount bank/encrypted
    su replicator
    ssh-keygen

    Receiver machine:
    ln -s /usr/sbin/zfs /usr/local/bin/zfs
    useradd -s /bin/bash replicator
    mkdir -p /home/replicator 
    chown replicator:replicator /home/replicator
    passwd replicator

    Sender mashine:
    ssh-copy-id -i .ssh/id_rsa.pub Remotehost
    zfs allow -u replicator compression,create,receive,destroy,mount bank/companyname

    "
    ;;
	*)
    echo "
    Usage:

    To show the prepare instrutions:
    zfskeeper.sh prepare

    localkeeping:
    keep last 10 snapshots of bank/encrypted/subvol-100-disk-0

    zfskeeper.sh bank/encrypted/subvol-100-disk-0 10

    remotekeeping:

    keep last 10 snapshots bank/encrypted/subvol-100-disk-0 and send it by ssh to Remotehost:22 bank/rtl/subvol-100-disk-0
    and keep last 20 copies by replicator user and limit transferspeed 10Mb/s

    zfskeeper.sh bank/encrypted/subvol-100-disk-0 10 Remotehost 22 10m replicator bank/rtl/subvol-100-disk-0 20

    If you need to send encrypted data, then you need add -w to the end of the line

    zfskeeper bank/encrypted/subvol-100-disk-0 10 Remotehost 22 10m replicator bank/rtl/subvol-100-disk-0 20 -w
    "
    ;;
    esac
    exit 0
    ;;
    2)
    echo `date +"%T"`" Local keeping of $NAMESNAP being started" > $logfile
    ;;
    8|9)
    echo `date +"%T"`" Remote keeping of $NAMESNAP being started" > $logfile
    ;;
    *)
    echo "illegal number of parameters" >&2
    exit 1
    ;;
esac



####################################### Local part #######################################################

# Remove waste local snaps
numsnap=`zfs list -H -o name -t snapshot -s creation|grep "${zpool}@"|wc|awk '{ print $1 }'`
let MAXSNAP=numsnap-lsnaps+1 >/dev/null
if [ $MAXSNAP -gt 0 ] ; then
    for d in `zfs list -H -o name -t snapshot -s creation| grep "${zpool}@"|/usr/bin/head -n"$MAXSNAP"`; do
        zfs destroy ${d}
        log_last_command "Remove local snapshot $d"
    done
fi

# Create fresh local snap
zfs snapshot $zpool@backup_$NAMESNAP
log_last_command "Create local $zpool@backup_$NAMESNAP" true

####################################### Local part #######################################################

if [ -z "$backpool" ]; then
    write_to_log "Local keeping is complete"
    exit 0
fi

####################################### Remote part #######################################################


# Check remote address
if [ -n "$ip" ]; then
    if ping -c 1 $ip > null ; then
            sship="ssh -c aes128-ctr -p"$port" -l"$remoteuser" "$ip
    else
            echo "URL $ip is not accesiible, abort"
            send_error_to_mail "Try to ping remote host" "URL $ip is not accesiible, abort" "$*"
            exit 1
    fi
else
    # Remote backup is unnecessary
    exit 0
fi


# Remove waste local snaps
numsnap=`$sship zfs list -H -o name -t snapshot -s creation|grep "${backpool}@"|wc|awk '{ print $1 }'`
let MAXSNAP=numsnap-rsnaps+1 >/dev/null
if [ $MAXSNAP -gt 0 ] ; then
    for d in `$sship zfs list -H -o name -t snapshot -s creation| grep "${backpool}@"|/usr/bin/head -n"$MAXSNAP"`; do
        $sship zfs destroy ${d}
        log_last_command "Remove local snapshot $d"
    done
fi

# Receive last remote snap
MOST_SLAVE_SNAP_NAME=`$sship zfs list -H -o name -t snapshot -s creation|grep "$backpool@backup"|tail -n1|awk -F "@" '{print $2}'`

# If localbackup has same snap then send incremental copy. If has't then send full
if [ -n "`zfs list -H -o name -t snapshot -s creation|grep -w "$zpool@$MOST_SLAVE_SNAP_NAME"`" ]; then
    #zfs send $sendargs -i $MOST_SLAVE_SNAP_NAME $zpool@backup_$NAMESNAP | pv -L $speedl | $sship zfs receive -vF $backpool@backup_$NAMESNAP &>> $logfile
    zfs send $sendargs -i $MOST_SLAVE_SNAP_NAME $zpool@backup_$NAMESNAP | mbuffer -q -v 0 -s 128k -m 1G | pv -L $speedl | $sship "mbuffer -q -v 0 -s 128k -m 1G | zfs receive -vF $backpool@backup_$NAMESNAP" &>> $logfile
    log_last_command "Sending incremental backup to the remote machine" true
else
    #If backpool exist we remove it. You can rename it
    if [ -n "`$sship zfs list -H -o name -s creation|grep -w "$backpool"`" ]; then
	#$sship zfs rename -p $backpool `$sship zfs list -H -o name|grep -w "$backpool"|awk -F "/" '{print $1}'`/old_$NAMESNAP
	$sship zfs destroy -r $backpool 2>> $logfile
	log_last_command "Need to destroy remotepool for full sending $backpool" true
    fi
    #zfs send $sendargs $zpool@backup_$NAMESNAP | pv -L $speedl | $sship zfs receive -vF $backpool &>> $logfile
    zfs send $sendargs $zpool@backup_$NAMESNAP | mbuffer -q -v 0 -s 128k -m 1G | pv -L $speedl | $sship "mbuffer -q -v 0 -s 128k -m 1G | zfs receive -vF $backpool" &>> $logfile

    log_last_command "Sending full backup to the remote machine" true
fi


####################################### Remote part #######################################################

write_to_log "Remote keeping is complete"
exit 0


zfskeepall.sh


рдХрдИ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЯреЛрдВрдб рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд░ рдХреЛрдИ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдж рдФрд░ рд░рдВрдЧ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

#!/bin/bash
scriptpath=/home/replicator/zfskeeper.sh
$scriptpath bank/encrypted/subvol-100-disk-0 5 RemoteHost 22 30m replicator bank/rtl/subvol-100-disk-0 5 -w

рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди


рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рдпрд╛, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВрдиреЗ рддрдВрддреНрд░ рдХреА рд╕рдордЧреНрд░ рд╕рдВрдЪрд╛рд▓рди рдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреАред рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рд▓реЗрдЦрди рд╢реИрд▓реА рдмрд▓реНрдХрд┐ рдЧрдВрджрд╛ рд╣реИ, рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред

zfs-auto-snapshot.sh рд╕рд┐рд░реНрдл рдПрдХ рдмреНрд▓реЙрдХ рд╣реИред рдЙрдзрд╛рд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ, рд╕реБрдВрджрд░, рд╕рд╛рдл, рд▓реЗрдХрд┐рди рднрд╛рд░реА рдФрд░

рдХрдо рдХрд╛рд░реНрдпрд╛рддреНрдордХ zfsbackup.sh - рдпрд╣ рднреА рдПрдХ рд╕рд╛рдл рд╣реИ, рд▓реЗрдХрд┐рди

рдХрдо рдХрд╛рд░реНрдпрд╛рддреНрдордХ PS рдореИрдВ рддреАрд╕рд░реА рдмрд╛рд░ рд╕реЗ zfs рдереЛрдбрд╝рд╛ рд╕рд╛, рд╣рд░ рдмрд╛рд░ рдпрд╣ рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП nibbled рд╣реИред рдореИрдВ рдЙрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓рд╛, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрд╕рдПрдПрд╕ рдбрд┐рд╕реНрдХ (рдХрдо рд╕реЗ рдХрдо 7200, рдХрдо рд╕реЗ рдХрдо рдПрдирдПрд▓) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЧрдИред

рд╕рднреА рдХреЗ рд▓рд┐рдП рд╢рд╛рдВрддрд┐! рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

All Articles