Mich regt schon laenger auf dass pishrink - eigentlich ein nettes Tool - aber leider mit einer Menge Unzulaenglichkeiten - nicht von Drewsif maintained wird. Ich hatte mal begonnen zu contributen - aber da laeuft nichts Es gibt 18 unbearbeitet PRs
Mir ist jetzt mal die Galle geplatzt und ich habe mal einen entsprechenden Kommentar in GH hinterlassen. Bin mal gespannt ob und was als Reaktion von ihm kommt.

pishrink - nice Tool - aber leider nicht maintained :-(((
- framp
- Thread is marked as Resolved.
Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
Mach mit und werde Teil unserer Community!
-
-
Schau mal ob du hier fündig wirst!
-
Ich verstehe Dein Problem, aber vielleicht hat er einfach keine Lust oder Zeit mehr (ok, in dem Fall könnte er ein "pishrink is no longer maintained" anmerken) oder er oder ein naher Angehöriger hat gesundheitliche Probleme bekommen und ist somit einfach raus, weil es für ihn wichtigeres gibt als dieses m.M.n. wirklich nützliche Tool.
-
weil es für ihn wichtigeres gibt als dieses m.M.n. wirklich nützliche Tool.
Das ist ja gerade mein Problem. Es ist - fuer mich nicht - aber viele andere ein nuetzliches Tool.
Ein dd Backup ist ein gefaehrliches Backup.
Anyhow - sieh Dir an wie viele Leute Probleme haben mit pishrink. Ok ... it's your issue ... sorry - ich habe keine Zeit um mich darum zu kuemmern. Aber dann soll der Kerl mal die Karten auf den Tisch legen.
Es wird auf so vielen Seiten auf pishrink verlinked - ist ja auch gut - und es funktioniert ja auch of sehr gut aber es kann nicht sein das da jemand mal einen Hack den er irgendwo mal aufgeschnappt hat publiziert und nicht maintained
-
-
Ich verwende ein von Dir verbessertes piShrink
Danke fuer die Blumen. Aber es ist nicht Sinn mal eben einen Hack in GH zu publizieren und dann forget it. Entweder steht man dazu dass man es nicht mehr maintained oder man maintained es
-
Jetzt ruft jemand dazu auf
Quote
I think it's time for us to join forces and start collaborating more!Mein Kommentar war dass das sicherlich eine gute Idee ist. Aber dann in einem neuen Repository. Dem Repository Owner drewsif traue ich nicht dass er noch Zeit in PRs reinsteckt. Sein Hack war ein one shot und dann forget it.
-
Solche Sachen sind immer ziemlich wackelig.
Hier mal mein Versuch mit Python.
Ich würde das aber nicht auf wichtige Daten loslassen, da das nicht ausreichend getestet ist.
Getestet habe ich das mit einem loopback device. Das funktioniert nicht mit /dev/sda usw., da dort die Partitionsnummer ohne "p" angegeben wird.
Da unterscheide ich momentan nicht. Aber /dev/mmcblk0 sollte funktionieren. Als Standard-Partitionsnummer gebe ich 2 vor.
Ein Rollback, bei Fehlern, ist auch nicht vorhanden.
Mit sfdisk kann man die Partition auf das maximal mögliche vergrößern, wenn man den Wert von size aus dem dump der entsprechenden Partition einfach löscht.
Mit resize2fs kann man über den Optionsschalter -M das Dateisystem innerhalb der Partition schrumpfen.
Wenn man mehrere Durchläufe macht, wird es noch kleiner. (Abhängig von dem, was im Dateisystem enthalten ist).
Python
Display Morefrom __future__ import annotations import math import re import shutil import subprocess import sys from argparse import ArgumentParser from pathlib import Path REQUIRED_TOOLS = ("sfdisk", "losetup", "e2fsck", "resize2fs", "dumpe2fs") class ExceptionGroup(Exception): def __init__(self, name, exceptions): self.name = name self.exceptions = exceptions def check(device: Path, part: int): partition = Path(f"{device}p{part}") exceptions: list[Exception] = [ RuntimeError(f"Tool {program} is not installed") for program in REQUIRED_TOOLS if not shutil.which(program) ] if not device.exists(): exceptions.append(ValueError(f"Blockdevice {device} does not exist")) if not partition.exists(): exceptions.append(ValueError(f"Partition {partition} does not exist")) if exceptions: raise ExceptionGroup("Check failed", exceptions) def check_filesystem(device: Path, part: int): partition = f"{device}p{part}" proc = subprocess.run( ["sudo", "e2fsck", "-pf", partition], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, ) def resize_partition(device: Path, part: int, size: int | str = ""): stdout = subprocess.check_output(["sudo", "sfdisk", "-d", device], encoding="utf8") partition = f"{device}p{part}" sub = re.sub(rf"({partition}.+?size=\s+)(\d+)", rf"\g<1>{size}", stdout) subprocess.run( ["sudo", "sfdisk", device], input=sub, encoding="utf8", stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, ) def grow_filesystem(device: Path, part: int): partition = f"{device}p{part}" subprocess.run( ["sudo", "resize2fs", partition], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, ) def shrink_filesystem(device: Path, part: int): partition = Path(f"{device}p{part}") for count in range(1, 4): print("Shrinking run:", count) subprocess.run( ["sudo", "resize2fs", "-M", partition], stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL, ) stdout = subprocess.check_output( ["sudo", "dumpe2fs", partition], encoding="utf8", stderr=subprocess.DEVNULL ) if match := re.search(r"Block count:\s+(\d+)", stdout): block_count = int(match[1]) else: raise RuntimeError("Could not find `Block count:`") if match := re.search(r"Block size:\s+(\d+)", stdout): block_size = int(match[1]) else: raise RuntimeError("Could not find `Block size:`") return math.ceil(block_count * block_size / 512) def get_args(): parser = ArgumentParser(description="Grow or Shrink a partition with filesystem") parser.add_argument("action", help="grow or shrink", choices=("grow", "shrink")) parser.add_argument("device", type=Path, help="block device") parser.add_argument("--part", type=int, default=2, help="parition number") return parser.parse_args() def main(): args = get_args() check(args.device, args.part) if args.action == "grow": grow(args.device, args.part) elif args.action == "shrink": shrink(args.device, args.part) def grow(device, part): resize_partition(device, part) check_filesystem(device, part) grow_filesystem(device, part) def shrink(device, part): print("Checking filesystem") check_filesystem(device, part) print("Shrinking filesystem") filesystem_size = shrink_filesystem(device, part) print("Shrinking partition") resize_partition(device, part, filesystem_size) if __name__ == "__main__": retval = 0 try: main() except ExceptionGroup as e: print(e) retval |= 1 for exc in e.exceptions: print(f" {exc}") sys.exit(retval)
-
-
Offensichtlich habe ich da jemanden aus dem Tiefschlaf gerissen denn er hat mich gleich geblocked
Ich habe mit einer anderen git ID auf das Geschreibsel von Drewsif geantworet. Auf der einen Seite sagt er er kuemmert sich nicht mehr um pishrink und dann ist er doch erfreut ueber Hilfe. Irgendwie verstehe ich den Knaben nicht
. Ich haette gedacht dass er auf meine Amtwort gleich antwortet. Wieder dasselbe wie immer ... Pause ... Pause ... Pause ..
Entweder unblocked er bei sich jetzt meine normale github ID oder fuer mich ist pishrink gestorben. So kann ich nicht contributen.
Bislang bin ich noch nie in github geblocked worden. Interessant ist eine Sache: Jetzt werde ich nicht mehr als Contributor bei den Insights gelistet obwohl ich nach Drewsif den meisten Code zu pishrink beigesteuert habe
. Meine Commits sieht man allerdings noch. Ist schon ein merkwuerdiges Verhalten von github. So kann man als Repository Owner einen emsigen Contributor einfach so ausblenden
-
Bislang bin ich noch nie in github geblocked worden.
Das Projekt einfach forken, Problem gelöst.
Wenn die soziale Interaktion nicht mit dem Owner klappt, gibt es halt keinen anderen Weg.
Ich denke mal, dass du durch dein Tool genügend Bekanntheit erlangt hast und auf so einen Bremsklotz nicht angewiesen bist.
-
Hm ... eigentlich will ich nur contributen und nicht leaden
Vielleicht geht er ja doch noch mal auf meinen Vorschlag ein eine Organization zu erstellen und dann noch andere als Maintainer die PRs mergen koennen einsetzt die dann auch zeitnah und zuverlaessig agieren.
Wenn ich jetzt wieder sehe wie "reaktionsschnell" er ist habe ich da aber meine Zweifel.
Es sind genuegend Dinge bei raspiBackup im Backlog. Ich warte jetzt mal einfach ab. Ansonsten - vielleicht bekomme ich dann aber irgendwann doch den Rappel und mache das wirklich was Du vorschlägst
-
Jetzt werde ich nicht mehr als Contributor bei den Insights gelistet obwohl ich nach Drewsif den meisten Code zu pishrink beigesteuert habe
Die Aussage muss ich korrigieren.
Keine Ahnung warum
aber jetzt sehe ich mich wieder als Contributor als ich meinen Fork gesynced habe als auch das Original ansehe.
Ist schon ein merkwuerdiges Verhalten von github.
Somit alles OK denn ich faende es schon wirklich sehr merkwuerdig von github einen Contributor einfach so ausblenden zu lassen nur weil er blocked ist.
-
Ich habe das Mumeltier wohl echt richtig aufgeweckt. Er hat jetzt viele Issues wo keine Codechanges notwendig sind kommentiert und geclosed. Jetzt sind nur noch 32 issues offen.
Ausserdem hat er einen DiskussionsBeitrag erstellt mit dem Titel
QuoteHow do we feel about a Python version of PiShrinkBin mal gespannt ob er sich bei einer Pythonversion intensiver um PiShrink kuemmert als bisher.
Wie ist es? Hier gibt es ja eine Menge Pythonianer im Forum. Hat niemand Lust dort mitzumachen?
-
Ich habe mal einfach hier auf den Beitrag von mir verlinkt
-
Ob Drewsif sowie andere Leser der Discussion Deine deutschen Erklaerungen zu dem Code lesen koennen
Sie koennen zwar Uebersetzungstools nutzen - ist aber umstaendlich.
Ich denke es ist hilfreicher den Code in dem Diskussionforum direkt zu posten und Deine obige Beschreibung in Englisch dazuzufuegen.
-
aber jetzt sehe ich mich wieder als Contributor als ich meinen Fork gesynced habe als auch das Original ansehe.
Also ich sehe Dich da nicht.
Davon ab finde ich das Verhalten des Maintainers, wie er mit Kritik umgeht, als nicht akteptabel. Dafür hätte ich als Kind im Sandkasten schon einen gewaltigen Anschiss von meinen Eltern bekommen. Was ist denn heutzutage nur mit den Leuten los? Hat keiner mehr Anstand und steht zu seinen Fehlern?
Ich nehme alles zurück, was ich in #2 schrieb und behaupte das Gegenteil!
-
-
Franjo G Dort schon, aber da https://github.com/Drewsif/PiShrink/graphs/contributors nicht!
Ich habe auch mal darauf geantwortet. https://github.com/Drewsif/PiShrink/discussions/253
-
Dort schon, aber da https://github.com/Drewsif/PiShrink/graphs/contributors nicht!
Ok
-
Dort schon, aber da
Komisch - jetzt sehe ich mich da auch wieder nicht